Update cv1/program.c
This commit is contained in:
		
							parent
							
								
									582eb0227e
								
							
						
					
					
						commit
						fc0e556f11
					
				| @ -5,28 +5,33 @@ | ||||
| #define LINESIZE 100 | ||||
| 
 | ||||
| struct MenuItem { | ||||
|     char dish[LINESIZE]; | ||||
|     char dish[LINESIZE];          // Оригінальна назва страви
 | ||||
|     char normalized_dish[LINESIZE]; // Нормалізована назва страви
 | ||||
|     float price; | ||||
| }; | ||||
| 
 | ||||
| // Функція для нормалізації рядка за правилами "Hacker Script"
 | ||||
| void normalize(char* str) { | ||||
| void normalize(const char* str, char* normalized_str) { | ||||
|     int j = 0;  // Індекс для нормалізованого рядка
 | ||||
| 
 | ||||
|     for (int i = 0; str[i]; i++) { | ||||
|         str[i] = tolower(str[i]); | ||||
|         switch (str[i]) { | ||||
|             case 'o': str[i] = '0'; break; | ||||
|             case 'i': str[i] = '1'; break; | ||||
|             case 'z': str[i] = '2'; break; | ||||
|             case 'e': str[i] = '3'; break; | ||||
|             case 'a': str[i] = '4'; break; | ||||
|             case 's': str[i] = '5'; break; | ||||
|             case 'd': str[i] = '6'; break;  // 'b' mapped to '6'
 | ||||
|             case 't': str[i] = '7'; break; | ||||
|             case 'b': str[i] = '8'; break; | ||||
|             case 'q': str[i] = '9'; break; | ||||
|             default: break;  // 'r', 'y', 'n', 'd' залишаються незмінними
 | ||||
|         char ch = tolower(str[i]);  // Зробити маленьким
 | ||||
|         switch (ch) { | ||||
|             case 'o': normalized_str[j++] = '0'; break; | ||||
|             case 'i': normalized_str[j++] = '1'; break; | ||||
|             case 'z': normalized_str[j++] = '2'; break; | ||||
|             case 'e': normalized_str[j++] = '3'; break; | ||||
|             case 'a': normalized_str[j++] = '4'; break; | ||||
|             case 's': normalized_str[j++] = '5'; break; | ||||
|             case 'd': normalized_str[j++] = '6'; break; | ||||
|             case 't': normalized_str[j++] = '7'; break; | ||||
|             case 'b': normalized_str[j++] = '8'; break; | ||||
|             case 'q': normalized_str[j++] = '9'; break; | ||||
|             case ' ': normalized_str[j++] = ' '; break; // Залишити пробіл
 | ||||
|             default: normalized_str[j++] = ch;  // Інші символи залишаються без змін
 | ||||
|         } | ||||
|     } | ||||
|     normalized_str[j] = '\0';  // Завершити рядок
 | ||||
| } | ||||
| 
 | ||||
| // Функція для зчитування позиції меню
 | ||||
| @ -41,6 +46,9 @@ int read_menu_item(struct MenuItem* item) { | ||||
| 
 | ||||
|     item->dish[strcspn(item->dish, "\n")] = 0; // Видалити символ нового рядка
 | ||||
| 
 | ||||
|     // Нормалізація назви страви та збереження в інший масив
 | ||||
|     normalize(item->dish, item->normalized_dish); | ||||
| 
 | ||||
|     if (scanf("%f", &item->price) != 1) { | ||||
|         getchar(); // Очищення буфера введення
 | ||||
|         return 0; // Якщо зчитування не вдалося
 | ||||
| @ -57,12 +65,13 @@ int main(void) { | ||||
|     char search_string[LINESIZE]; | ||||
| 
 | ||||
|     // Запит на інгредієнт для пошуку
 | ||||
|     printf("Zadaj hladanu surovinu:\n"); | ||||
|     printf("Zadaj hladanu surovinu: "); | ||||
|     fgets(search_string, LINESIZE, stdin); | ||||
|     search_string[strcspn(search_string, "\n")] = 0; // Видалити символ нового рядка
 | ||||
| 
 | ||||
|     // Нормалізація рядка пошуку
 | ||||
|     normalize(search_string); | ||||
|     char normalized_search[LINESIZE]; | ||||
|     normalize(search_string, normalized_search); | ||||
| 
 | ||||
|     printf("Zadaj jedalny listok:\n"); | ||||
| 
 | ||||
| @ -73,22 +82,21 @@ int main(void) { | ||||
|             break; // Вихід з циклу на помилці зчитування або "end"
 | ||||
|         } | ||||
|          | ||||
|         // Нормалізація назви страви
 | ||||
|         normalize(item.dish); | ||||
|         menu[item_count++] = item; // Додати позицію до меню
 | ||||
|     } | ||||
| 
 | ||||
|     // Вивід знайдених страв
 | ||||
|     for (int i = 0; i < item_count; i++) { | ||||
|         // Перевіряємо, чи містить страва шуканий інгредієнт
 | ||||
|         if (strstr(menu[i].dish, search_string) != NULL) { | ||||
|         if (strstr(menu[i].normalized_dish, normalized_search) != NULL) { | ||||
|             // Виводимо знайдену страву
 | ||||
|             printf("%s\n", menu[i].dish); | ||||
|             printf("%s\n", menu[i].dish); // Оригінальна назва страви
 | ||||
|             printf("%.2f\n", menu[i].price); | ||||
|             break; // Вихід з циклу після першої знайденої страви
 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // Вивід загальної кількості зчитаних позицій
 | ||||
|     printf("Nacitanych %d poloziek.\n", item_count); | ||||
|      | ||||
|     return 0; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user