Переписать программу с С++ на Си - 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