Предмет: Информатика, автор: pol421339

Оформить с использованием меню с вызовом соответствующих функций. В задачах, которые предусматривают обработку списка записей (студенты, читатели, автомобили и т.п.), предусмотреть ввод первоначальной информации из файла.
Ввести структуру с полями ЧИСЛИТЕЛЬ и ЗНАМЕНАТЕЛЬ для описания понятия РАЦИОНАЛЬНОЕ ЧИСЛО. Составить и протестировать функции
а. ввода и вывода на экран рационального числа;
b. поиска в массиве X[N] рациональных чисел всех, равных заданному, и подсчета их количества (с учетом возможности сокращений, например, дроби 2/4 и 4/8 равны)
На языке Си.​

Ответы

Автор ответа: romamilanskij
0

Ответ:

#include <stdio.h>

#include <stdlib.h>

typedef struct {

int numerator;

int denominator;

} Rational;

void printRational(Rational r) {

printf("%d/%d", r.numerator, r.denominator);

}

void readRational(Rational *r) {

printf("Enter the numerator: ");

scanf("%d", &r->numerator);

printf("Enter the denominator: ");

scanf("%d", &r->denominator);

}

int gcd(int a, int b) {

if (b == 0) {

return a;

} else {

return gcd(b, a % b);

}

}

void reduceRational(Rational *r) {

int gcd_num = gcd(r->numerator, r->denominator);

r->numerator /= gcd_num;

r->denominator /= gcd_num;

}

int isEqual(Rational r1, Rational r2) {

reduceRational(&r1);

reduceRational(&r2);

return r1.numerator == r2.numerator && r1.denominator == r2.denominator;

}

int countEqual(Rational arr[], int n, Rational r) {

int count = 0;

for (int i = 0; i < n; i++) {

if (isEqual(arr[i], r)) {

count++;

}

}

return count;

}

int main() {

int n = 10; // размер массива

Rational arr[n]; // массив рациональных чисел

FILE *file = fopen("input.txt", "r"); // открытие файла для чтения

if (file == NULL) {

printf("Failed to open file.");

exit(1);

}

for (int i = 0; i < n; i++) {

fscanf(file, "%d/%d", &arr[i].numerator, &arr[i].denominator);

}

fclose(file); // закрытие файла

int choice = 0;

Rational r;

int count = 0;

while (choice != 3) {

printf("\nMENU\n");

printf("1. Enter a rational number\n");

printf("2. Count rational numbers equal to a given one\n");

printf("3. Quit\n");

printf("Enter your choice: ");

scanf("%d", &choice);

switch (choice) {

case 1:

readRational(&r);

printf("You entered: ");

printRational(r);

printf("\n");

break;

case 2:

readRational(&r);

count = countEqual(arr, n, r);

printf("Number of rational numbers equal to ");

printRational(r);

printf(" is %d\n", count);

break;

case 3:

printf("Exiting...\n");

break;

default:

printf("Invalid choice.\n");

break;

}

}

return 0;

}

Похожие вопросы
Предмет: Математика, автор: an20112029
Предмет: Математика, автор: annali2022