usaa24/cv1/program.c

112 lines
3.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_ITEMS 100
#define MAX_NAME_LENGTH 100
// Структура для зберігання назви страви і ціни
struct MenuItem {
char name[MAX_NAME_LENGTH];
float price;
};
// Функція для перетворення символу в "Hack3r Script"
char to_hacker_script(char c) {
switch (tolower(c)) {
case 'o': return '0';
case 'i': return '1';
case 'z': return '2';
case 'e': return '3';
case 'a': return '4';
case 's': return '5';
case 'b': return '6';
case 't': return '7';
case 'q': return '9';
default: return tolower(c); // Перетворюємо всі літери на малі
}
}
// Функція для нормалізації рядка (перетворює у "Hack3r Script")
void normalize(char* str) {
for (int i = 0; str[i]; i++) {
str[i] = to_hacker_script(str[i]);
}
}
// Функція для зчитування меню
int read_menu(struct MenuItem* menu) {
int count = 0;
char line[MAX_NAME_LENGTH];
printf("Zadaj jedalny listok (v formate 'nazov jedla, cena'). Pre ukoncenie zadajte 'end'.\n");
while (1) {
// Зчитуємо назву страви
printf("Vlož položku menu (nazov jedla): ");
if (!fgets(line, MAX_NAME_LENGTH, stdin)) break;
if (strncmp(line, "end", 3) == 0) break; // Якщо "end", закінчуємо введення
line[strcspn(line, "\n")] = '\0'; // Видаляємо символ нового рядка
strcpy(menu[count].name, line); // Копіюємо назву страви
// Зчитуємо ціну
printf("Vlož cenu jedla: ");
if (!fgets(line, MAX_NAME_LENGTH, stdin)) break;
menu[count].price = strtof(line, NULL); // Конвертуємо рядок у float
count++;
}
return count;
}
// Функція для пошуку страв за інгредієнтом
void search_menu(const struct MenuItem* menu, int menu_size, const char* ingredient) {
int found = 0;
char normalized_ingredient[MAX_NAME_LENGTH];
// Копія пошукового запиту та його нормалізація
strcpy(normalized_ingredient, ingredient);
normalize(normalized_ingredient);
printf("\nVýsledky hľadania:\n");
for (int i = 0; i < menu_size; i++) {
char normalized_dish[MAX_NAME_LENGTH];
strcpy(normalized_dish, menu[i].name);
normalize(normalized_dish); // Нормалізуємо назву страви
// Якщо знайдено відповідність
if (strstr(normalized_dish, normalized_ingredient)) {
printf("%s\n%.2f\n", menu[i].name, menu[i].price);
found = 1;
}
}
if (!found) {
printf("Zadana surovina nebola najdena.\n");
}
}
int main() {
struct MenuItem menu[MAX_ITEMS];
char search_term[MAX_NAME_LENGTH];
int menu_size;
// Введення пошукового запиту
printf("Zadaj hladanu surovinu: ");
fgets(search_term, MAX_NAME_LENGTH, stdin);
search_term[strcspn(search_term, "\n")] = '\0'; // Видаляємо символ нового рядка
// Зчитування меню
menu_size = read_menu(menu);
// Пошук страв за інгредієнтом
search_menu(menu, menu_size, search_term);
// Виведення кількості позицій меню
printf("\nNacitanych %d poloziek.\n", menu_size);
return 0;
}