Переписать программу с С++ на Си - C (СИ)
Формулировка задачи:
#include <iostream> #include <fstream> struct Date { int d, m, y; } dates[100]; int readFile(); int main() { setlocale(0, "Rus"); int count = readFile(); for(int i = 0; i < count; ++i) std::cout << i+1 << ". " << dates[i].d << ' ' << dates[i].m << ' ' << dates[i].y << std::endl; int min = dates[0].y; for(int i = 0; i < count; ++i) { if(min > dates[i].y) min = dates[i].y; } std::cout << "Наименьший год: " << min << std::endl; int max = dates[0].y; for(int i = 0; i < count; ++i) { if(max < dates[i].y) max = dates[i].y; } std::cout << "Наибольший год: " << max << std::endl; std::cout << "Весенние даты: " << std::endl; for(int i = 0; i < count; ++i) if(dates[i].m >= 3 && dates[i].m <= 5) std::cout << dates[i].d << ' ' << dates[i].m << ' ' << dates[i].y << std::endl; return 0; } int readFile() { const char *path = {"file.txt"}; std::ifstream in(path); int counter = 0; while(!in.eof()) { in >> dates[counter].d; in >> dates[counter].m; in >> dates[counter].y; counter++; } return counter; }
Решение задачи: «Переписать программу с С++ на Си»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <malloc.h> #define ITEMS 100 struct Date { int d, m, y; }; struct Date *dates; int readFile(); int main() { int i, min, max, count; setlocale(0, "Rus"); dates = malloc(sizeof(struct Date)*ITEMS); count = readFile(); for(i = 0; i < count; ++i) printf("%2d.%2d.%d\n\r",dates[i].d, dates[i].m, dates[i].y); max = min = dates[0].y; for( i = 0; i < count; ++i) { if(min > dates[i].y) min = dates[i].y; if(max < dates[i].y) max = dates[i].y; } printf("Наименьший год: %d\n\rНаибольший год: %d\n\rВесенние даты:\n\r",min,max); for(i = 0; i < count; ++i) if(dates[i].m >= 3 && dates[i].m <= 5) printf("%02d.%2d.%d\n\r",dates[i].d, dates[i].m, dates[i].y); return 0; } int readFile() { int counter = 0; FILE *FP = fopen("file.txt","r"); while(!feof(FP)) { fscanf( FP, "%d %d %d",&dates[counter].d,&dates[counter].m,&dates[counter].y); counter++; } fclose(FP); return --counter; }
Объяснение кода листинга программы
- #include
— подключает файл стандартного ввода/вывода - #include
— подключает файл, определяющий текущую локаль - #include
— подключает файл, содержащий функции для работы с памятью - #define ITEMS 100 — определяет размер массива
- struct Date { — определяет структуру данных с именем
Date
- int d, m, y; — определяет поля структуры
Date
- *struct Date dates;** — объявляет указатель на структуру
Date
- int readFile(); — объявляет функцию с именем
readFile
- int main() { — определяет функцию с именем
main
- int i, min, max, count; — объявляет переменные
- setlocale(0,
Rus
); — устанавливает текущую локаль наRus
- *dates = malloc(sizeof(struct Date)ITEMS);** — выделяет память под массив структур
Date
- count = readFile(); — вызывает функцию
readFile
и сохраняет результат в переменнуюcount
- for(i = 0; i < count; ++i) — начинает цикл по элементам массива
- printf(
%2d.%2d.%d\n\r
,dates[i].d, dates[i].m, dates[i].y); — выводит дату на экран - max = min = dates[0].y; — инициализирует переменные
max
иmin
первым годом из файла - for( i = 0; i < count; ++i) { — начинает цикл по элементам массива
- if(min > dates[i].y) min = dates[i].y; — обновляет значение переменной
min
при необходимости - if(max < dates[i].y) max = dates[i].y; — обновляет значение переменной
max
при необходимости - printf(
Наименьший год: %d\n\rНаибольший год: %d\n\rВесенние даты:\n\r
,min,max); — выводит на экран результаты - for(i = 0; i < count; ++i) — начинает цикл по элементам массива
- if(dates[i].m >= 3 && dates[i].m <= 5) — проверяет, является ли месяц весенним
- printf(
%02d.%2d.%d\n\r
,dates[i].d, dates[i].m, dates[i].y); — выводит дату на экран - return 0; — завершает функцию
main
- int readFile() { — определяет функцию
readFile
- int counter = 0; — объявляет переменную
counter
- *FILE FP = fopen(
file.txt
,r
);** — открывает файлfile.txt
для чтения - while(!feof(FP)) { — начинает цикл, пока не достигнут конец файла
- fscanf( FP,
%d %d %d
,&dates[counter].d,&dates[counter].m,&dates[counter].y); — считывает три числа из файла и записывает их в структуруDate
- counter++; — увеличивает значение переменной
counter
- fclose(FP); — закрывает файл
file.txt
- return counter; — возвращает количество прочитанных строк
- } — завершает функцию
readFile
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д