Переписать программу с С++ на Си - 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;
}
file.txt буду очень благодарен!

Решение задачи: «Переписать программу с С++ на Си»

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;
}

Объяснение кода листинга программы

  1. #include — подключает файл стандартного ввода/вывода
  2. #include — подключает файл, определяющий текущую локаль
  3. #include — подключает файл, содержащий функции для работы с памятью
  4. #define ITEMS 100 — определяет размер массива
  5. struct Date { — определяет структуру данных с именем Date
  6. int d, m, y; — определяет поля структуры Date
  7. *struct Date dates;** — объявляет указатель на структуру Date
  8. int readFile(); — объявляет функцию с именем readFile
  9. int main() { — определяет функцию с именем main
  10. int i, min, max, count; — объявляет переменные
  11. setlocale(0, Rus); — устанавливает текущую локаль на Rus
  12. *dates = malloc(sizeof(struct Date)ITEMS);** — выделяет память под массив структур Date
  13. count = readFile(); — вызывает функцию readFile и сохраняет результат в переменную count
  14. for(i = 0; i < count; ++i) — начинает цикл по элементам массива
  15. printf(%2d.%2d.%d\n\r,dates[i].d, dates[i].m, dates[i].y); — выводит дату на экран
  16. max = min = dates[0].y; — инициализирует переменные max и min первым годом из файла
  17. for( i = 0; i < count; ++i) { — начинает цикл по элементам массива
  18. if(min > dates[i].y) min = dates[i].y; — обновляет значение переменной min при необходимости
  19. if(max < dates[i].y) max = dates[i].y; — обновляет значение переменной max при необходимости
  20. printf(Наименьший год: %d\n\rНаибольший год: %d\n\rВесенние даты:\n\r,min,max); — выводит на экран результаты
  21. for(i = 0; i < count; ++i) — начинает цикл по элементам массива
  22. if(dates[i].m >= 3 && dates[i].m <= 5) — проверяет, является ли месяц весенним
  23. printf(%02d.%2d.%d\n\r,dates[i].d, dates[i].m, dates[i].y); — выводит дату на экран
  24. return 0; — завершает функцию main
  25. int readFile() { — определяет функцию readFile
  26. int counter = 0; — объявляет переменную counter
  27. *FILE FP = fopen(file.txt,r);** — открывает файл file.txt для чтения
  28. while(!feof(FP)) { — начинает цикл, пока не достигнут конец файла
  29. fscanf( FP, %d %d %d,&dates[counter].d,&dates[counter].m,&dates[counter].y); — считывает три числа из файла и записывает их в структуру Date
  30. counter++; — увеличивает значение переменной counter
  31. fclose(FP); — закрывает файл file.txt
  32. return counter; — возвращает количество прочитанных строк
  33. } — завершает функцию readFile

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы