Лотерея. Программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру - C (СИ)
Формулировка задачи:
нужно написать программу которая позволяет загружать данные о 10 абонентах(Имя и 9-ти значный номер телефона) и выборе победителя следующим образом: программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру. Если никто не выигрывает, процедура выбора победителей повторяется.
Решение задачи: «Лотерея. Программа выбирает одну цифру, выигрывают те, чей номер заканчивается на ту цифру»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAX_SUBSCRIBERS 10 typedef struct subscriber { size_t phone; char name[20]; } subscriber; void loadInfo(subscriber *sub); int main(int argc, char *argv[]) { subscriber *sub = (subscriber *) malloc(sizeof(subscriber) * MAX_SUBSCRIBERS); int i = 0; size_t rand_number; unsigned char founded = 0; srand(time(NULL)); printf("\nВведите данные абонентов\n"); while(!founded) { for( i = 0; i < MAX_SUBSCRIBERS; i++) loadInfo(&sub[i]); rand_number = rand()%9; for( i = 0; i < MAX_SUBSCRIBERS; i++, sub++) { if(rand_number == (sub->phone % 10)) { founded = 1; printf("%d совпало с последней цифрой абонента %s (%lu)\n", rand_number, sub->name, sub->phone); } } if(!founded) printf("\nСовпадений не найдено (случайное число - %d)\n", rand_number); } return 0; } void loadInfo(subscriber *sub) { printf("\nВведите имя абонента\n"); scanf("%s", sub->name); printf("\nВведите номер телефона\n"); scanf("%lu", &sub->phone); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с C
- Определяем максимальное количество абонентов, которые могут быть добавлены в список
- Создаем структуру
абонент
, которая содержит имя и номер телефона абонента - Определяем функцию loadInfo, которая позволяет вводить данные абонента
- Входим в главный цикл программы, который продолжается до тех пор, пока не будет найдено совпадение
- Заполняем список абонентов с помощью функции loadInfo
- Генерируем случайное число от 0 до 9 (так как последняя цифра номера телефона будет в этом диапазоне)
- Проверяем каждый номер телефона в списке на совпадение последней цифры с сгенерированным числом
- Если совпадение найдено, выводим сообщение об этом
- Если после проверки всех номеров телефона совпадение не найдено, выводим сообщение об этом
- Выходим из главного цикла программы
- Выводим итоговое сообщение о результате розыгрыша
- Определяем функцию loadInfo, которая позволяет вводить данные абонента (подтверждаем, что это функция была определена ранее)
- Вводим данные абонента, используя функцию scanf (подтверждаем, что это происходит в функции loadInfo)