Update cv1/program.c
This commit is contained in:
		
							parent
							
								
									91c11598de
								
							
						
					
					
						commit
						87cb8dcee3
					
				
							
								
								
									
										140
									
								
								cv1/program.c
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								cv1/program.c
									
									
									
									
									
								
							| @ -1,18 +1,24 @@ | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <stdlib.h> | ||||
| #include <ctype.h> | ||||
| 
 | ||||
| #define LINESIZE 100 | ||||
| #define MAX_PIZZAS 100 | ||||
| #define MAX_PIZZA 100 | ||||
| 
 | ||||
| // Структура для зберігання інформації про піцу
 | ||||
| struct pizza { | ||||
|     float prize; | ||||
|     char name[LINESIZE]; | ||||
|     float prize; // Ціна піци
 | ||||
|     char name[LINESIZE]; // Назва піци
 | ||||
| }; | ||||
| 
 | ||||
| // Функція для перетворення символу у "Hacker Script"
 | ||||
| char hacker_script(char c) { | ||||
|     // Перетворення відповідно до "Hack3r scr1pt"
 | ||||
|     // Приводимо до нижнього регістру
 | ||||
|     if (c >= 'A' && c <= 'Z') { | ||||
|         c += 32; // Перетворюємо у нижній регістр
 | ||||
|     } | ||||
| 
 | ||||
|     // Замінюємо літери на цифри
 | ||||
|     switch (c) { | ||||
|         case 'o': return '0'; | ||||
|         case 'i': return '1'; | ||||
| @ -20,75 +26,105 @@ char hacker_script(char c) { | ||||
|         case 'e': return '3'; | ||||
|         case 'a': return '4'; | ||||
|         case 's': return '5'; | ||||
|         case 'd': return '6'; | ||||
|         case 'b': return '6'; | ||||
|         case 't': return '7'; | ||||
|         case 'b': return '8'; | ||||
|         case 'g': return '8'; | ||||
|         case 'q': return '9'; | ||||
|         default: return tolower(c); // Зробити маленьким
 | ||||
|         default: return c; // Повертаємо без змін
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void normalize(char *input, char *output) { | ||||
|     for (int i = 0; input[i] != '\0'; i++) { | ||||
| // Функція для нормалізації рядка
 | ||||
| void normalize_string(const char* input, char* output) { | ||||
|     int i = 0; | ||||
|     while (input[i] != '\0' && i < LINESIZE - 1) { | ||||
|         output[i] = hacker_script(input[i]); | ||||
|         i++; | ||||
|     } | ||||
|     output[strlen(input)] = '\0'; // Завершити рядок
 | ||||
|     output[i] = '\0'; // Додаємо термінатор рядка
 | ||||
| } | ||||
| 
 | ||||
| int read_pizza(struct pizza *item) { | ||||
|     char line[LINESIZE]; | ||||
|     if (fgets(line, sizeof(line), stdin) == NULL) return 0; | ||||
|      | ||||
|     // Зчитування назви
 | ||||
|     strcpy(item->name, line); | ||||
|      | ||||
|     // Зчитування ціни
 | ||||
|     if (fgets(line, sizeof(line), stdin) == NULL) return 0; | ||||
|      | ||||
|     // Перетворення рядка на float
 | ||||
|     item->prize = strtof(line, NULL); | ||||
|     if (item->prize == 0.0F) return 0; // Перевірка на успішність
 | ||||
|      | ||||
|     return 1; // Успішно зчитано
 | ||||
| } | ||||
| // Функція для пошуку підрядка з урахуванням "Hacker Script"
 | ||||
| int search_string(const char* heap, const char* needle) { | ||||
|     int len_heap = strlen(heap); | ||||
|     int len_needle = strlen(needle); | ||||
| 
 | ||||
| int search_string(const char *haystack, const char *needle) { | ||||
|     for (int i = 0; haystack[i] != '\0'; i++) { | ||||
|     for (int i = 0; i <= len_heap - len_needle; i++) { | ||||
|         int j; | ||||
|         for (j = 0; needle[j] != '\0' && haystack[i + j] == needle[j]; j++); | ||||
|         if (needle[j] == '\0') return i; // Знайдено
 | ||||
|         for (j = 0; j < len_needle; j++) { | ||||
|             if (hacker_script(heap[i + j]) != hacker_script(needle[j])) { | ||||
|                 break; // Не співпадає
 | ||||
|             } | ||||
|         } | ||||
|         if (j == len_needle) { | ||||
|             return i; // Знайдено
 | ||||
|         } | ||||
|     } | ||||
|     return -1; // Не знайдено
 | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     char search[LINESIZE]; | ||||
|     struct pizza menu[MAX_PIZZAS]; | ||||
|     char normalized_search[LINESIZE]; | ||||
|     int count = 0; | ||||
| // Функція для читання однієї піци
 | ||||
| int read_pizza(struct pizza* item) { | ||||
|     char line[LINESIZE]; // Для назви піци
 | ||||
|     char line2[LINESIZE]; // Для ціни
 | ||||
| 
 | ||||
|     printf("Zadaj hladanu surovinu:\n"); | ||||
|     fgets(search, sizeof(search), stdin); | ||||
|     search[strcspn(search, "\n")] = 0; // Прибрати символ нового рядка
 | ||||
|     // Читаємо назву піци
 | ||||
|     if (fgets(line, sizeof(line), stdin) == NULL) { | ||||
|         return 0; // Помилка при читанні
 | ||||
|     } | ||||
|      | ||||
|     // Видаляємо символ нового рядка з назви
 | ||||
|     line[strcspn(line, "\n")] = 0;  | ||||
| 
 | ||||
|     // Нормалізація пошукового рядка
 | ||||
|     normalize(search, normalized_search); | ||||
| 
 | ||||
|     printf("Zadaj jedalny listok:\n"); | ||||
|     while (read_pizza(&menu[count]) && count < MAX_PIZZAS) { | ||||
|         count++; | ||||
|     // Читаємо ціну
 | ||||
|     if (fgets(line2, sizeof(line2), stdin) == NULL) { | ||||
|         return 0; // Помилка при читанні
 | ||||
|     } | ||||
| 
 | ||||
|     // Пошук і вивід результатів
 | ||||
|     printf("Znalezené jedlá:\n"); | ||||
|     for (int i = 0; i < count; i++) { | ||||
|         char normalized_name[LINESIZE]; | ||||
|         normalize(menu[i].name, normalized_name); | ||||
|     // Перетворюємо рядок ціни у число з плаваючою комою
 | ||||
|     float value = strtof(line2, NULL); | ||||
|     if (value == 0.0F && line2[0] != '0') { | ||||
|         return 0; // Перетворення не вдалося
 | ||||
|     } | ||||
| 
 | ||||
|     // Копіюємо дані у структуру
 | ||||
|     item->prize = value; | ||||
|     strcpy(item->name, line); | ||||
|     return 1; // Успішно
 | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     struct pizza jedalny_listok[MAX_PIZZA]; // Масив для зберігання позицій меню
 | ||||
|     int counter = 0; | ||||
| 
 | ||||
|     printf("Zadaj hladanu surovinu:\n"); | ||||
|     char search_string_input[LINESIZE]; // Для пошукового запиту
 | ||||
|     fgets(search_string_input, sizeof(search_string_input), stdin); | ||||
| 
 | ||||
|     // Видаляємо символ нового рядка з пошукового рядка
 | ||||
|     search_string_input[strcspn(search_string_input, "\n")] = 0; | ||||
| 
 | ||||
|     printf("Zadaj jedalny listok:\n"); | ||||
|     // Читаємо піци до тих пір, поки не буде помилка
 | ||||
|     while (read_pizza(&jedalny_listok[counter]) && counter < MAX_PIZZA) { | ||||
|         counter++; | ||||
|     } | ||||
| 
 | ||||
|     // Обробка пошуку
 | ||||
|     printf("Vyhovujuce jedla:\n"); | ||||
|      | ||||
|     char normalized_search[LINESIZE]; // Для нормалізованого пошукового рядка
 | ||||
|     normalize_string(search_string_input, normalized_search); // Нормалізуємо пошуковий рядок
 | ||||
| 
 | ||||
|     for (int i = 0; i < counter; i++) { | ||||
|         char normalized_name[LINESIZE]; // Для нормалізованої назви піци
 | ||||
|         normalize_string(jedalny_listok[i].name, normalized_name); // Нормалізуємо назву піци
 | ||||
| 
 | ||||
|         if (search_string(normalized_name, normalized_search) != -1) { | ||||
|             printf("%s%.2f\n", menu[i].name, menu[i].prize); | ||||
|             printf("%s má cenu %.2f\n", jedalny_listok[i].name, jedalny_listok[i].prize); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     printf("Nacitanych %d poloziek.\n", count); | ||||
|     printf("Nacitanych %d poloziek.\n", counter); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user