Определить площадь каждого прямоугольника - C (СИ)
Формулировка задачи:
Задать файл, содержащий координаты левого верхнего и нижнего правого угла прямоугольника – целые числа типа int. Определить площадь каждого прямоугольника, упорядочить эти значения по возрастанию и записать в файл.
Нужно решит задачу на C
вот код, но у меня не работает цикл (не выдает "неверное условие"), там a--x1, b--y1, c--x2, d--y2
и еще вопрос: как записать в файл площади???
t - это буферная переменная, zap1 - для упорядоченных площадей
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <math.h> struct koord{ int a; int b; int c; int d; } zap[40], zap1[40],t; FILE *Fzap; void main(void) { int i,j,a,b,c,d,S,size=sizeof(koord),N, nn=0; clrscr(); Fzap=fopen("d:\\koord.dat","wb"); puts("Vvedi kol-vo pramoygolnikov "); fflush(stdin); scanf("%d",&N); printf(" n=%d\n",N); for (j=0; j<N; j++) { puts("vvedi a "); fflush(stdin); scanf("%d",&zap[j].a); puts("vvedi b"); fflush(stdin); scanf("%d",&zap[j].b); puts("vvedi c"); fflush(stdin); scanf("%d",&zap[j].c); puts("vvedi d"); fflush(stdin); scanf("%d",&zap[j].d); fwrite(&zap[j], size, 1, Fzap); //5 } { if ((c>a) && (d<b)) S=fabs((c-a)*(b-d)); //проверка координат (явл-тся ли прямоугольником) else puts("\n nevernoe yslovie"); } puts("\ninfo"); for (j=0; j<N; j++) { printf("%3d %3d %3d %3d \n",zap[j].a, zap[j].b,zap[j].c,zap[j].d); } fclose(Fzap); getch(); }
Решение задачи: «Определить площадь каждого прямоугольника»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <locale.h> #define MAX_ZAPS 100 #define FILE_NAME "d:\\koord.txt" typedef struct koord { int x1; int y1; // координаты левой верхней точки int x2; int y2; // координаты нижней правой точки int S; // площадь }; int main(int argc, char ** argv) { FILE *Fzap; struct koord zap[MAX_ZAPS]; struct koord *z = zap; // используем этот указатель вместо индекса int size = sizeof(struct koord), j, N; // чистим экран system("cls"); setlocale(LC_ALL, "Russian"); // вводим кол-во printf("Введите кол-во прямоугольников: "); if (!scanf("%d", &N)) { fflush(stdin); N = 10; } if (N >= MAX_ZAPS || N < 1) N = MAX_ZAPS; // вводим данные в файл Fzap = fopen(FILE_NAME, "wb"); j = 0; for (;;) { printf("прямоугольник №%d\n", j + 1); printf("x(1): "); scanf("%d", &z->x1); printf("y(1): "); scanf("%d", &z->y1); printf("x(2): "); scanf("%d", &z->x2); printf("y(2): "); scanf("%d", &z->y2); if ((z->x2 > z->x1) && (z->y2 < z->y1)) { // пишем в файл z->S = fabs((z->x2 - z->x1) * (z->y1 - z->y2)); fwrite(z, size, 1, Fzap); ++z; if (++j == N) break; } else printf("\n неверное условие\n"); } fclose(Fzap); // выводим координаты из файла из файла Fzap = fopen(FILE_NAME,"rb"); if (!Fzap) { printf("немогу открыть файл :(\n"); return 1; } // читаем из файла fread(&zap, size, N, Fzap); z = zap; // выводим на консоль каждую запись for (j = 0; j < N; ++j) { printf("(%d;%d) (%d;%d) %d\n", z->x1, z->y1, z->x2, z->y2, z->S); ++z; } fclose(Fzap); // ждем когда пользователь нажмет кнопку system("pause"); return 0; }
Объяснение кода листинга программы
- Подключаем необходимые библиотеки
- Определяем структуру koord для хранения координат прямоугольников и их площади
- Устанавливаем размерность структуры koord
- Инициализируем переменные для ввода и вывода данных
- Запрашиваем у пользователя количество прямоугольников
- Проверяем корректность ввода и, при необходимости, устанавливаем значение по умолчанию
- Открываем файл для записи данных
- Организуем цикл для ввода данных о каждом прямоугольнике
- Проверяем условие для прямоугольника (разница между x2 и x1 положительна, а разница между y2 и y1 отрицательна)
- Если условие выполняется, то записываем данные в файл и переходим к следующему прямоугольнику
- Если условие не выполняется, то выводим сообщение об ошибке и прерываем цикл
- Закрываем файл
- Открываем файл для чтения данных
- Проверяем, удалось ли открыть файл
- Если файл успешно открыт, то читаем данные из файла
- Выводим данные на консоль
- Закрываем файл
- Ждем нажатия кнопки пользователем
- Завершаем программу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д