Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 9
1

Определить площадь каждого прямоугольника

28.06.2011, 22:25. Показов 2295. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задать файл, содержащий координаты левого верхнего и нижнего правого угла прямоугольника – целые числа типа int. Определить площадь каждого прямоугольника, упорядочить эти значения по возрастанию и записать в файл.
Нужно решит задачу на C

вот код, но у меня не работает цикл (не выдает "неверное условие"), там a--x1, b--y1, c--x2, d--y2

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#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();
}

и еще вопрос: как записать в файл площади???
t - это буферная переменная, zap1 - для упорядоченных площадей
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2011, 22:25
Ответы с готовыми решениями:

Вычислить при N=1 — площадь прямоугольника, при N=2 — площадь параллелограмма
В зависимости от номера (N) типа фигуры, организовать ввод необходимых данных и вычислить при N = 1...

Площадь выпуклого прямоугольника
. Площадь треугольника, заданного координатами своих вершин, находится по формуле S = 0.5 * |x1y2...

Вычислить площадь прямоугольника
код не выдает ошибок, но после ввода ширины и длины просто нельзя ничего вводить и ничего не...

Найти минимальную площадь прямоугольника
Дано целое число N и набор из N прямоугольников, заданных своими сторонами – парами чисел...

7
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
28.06.2011, 23:48 2
Цитата Сообщение от katish12 Посмотреть сообщение
но у меня не работает цикл (не выдает "неверное условие"),
Насколько я смог разобраться в Вашем коде: Вы scanfом читаете на прямую в структуру, а в условии проверяете переменные находящиеся в стеке.
1
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 9
29.06.2011, 19:02  [ТС] 3
теперь я выяснила,что прога присваивает всем площадям значение последней!
в чем ошибка???
и не могли бы вы мне помочь отсортировать площади?


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct koord{
    int x1;
   int y1;
    int x2;
   int y2;
    } zap[100], zap1[100],t;
FILE *Fzap;
void main(void)
{   int i,j,x1,y1,x2,y2,S,size=sizeof(koord),N,nn=0;
clrscr();
 
Fzap=fopen("d:\\koord.txt","wb");
puts("Vvedi kol-vo pramoygolnikov ");
fflush(stdin);
scanf("%d",&N);
printf(" n=%d\n",N);
for (j=0; j<N; j++)
{ puts("vvedi x1 ");
fflush(stdin);
 scanf("%d",&zap[j].x1);
 puts("vvedi y1");
 fflush(stdin);
 scanf("%d",&zap[j].y1);
 puts("vvedi x2");
 fflush(stdin);
 scanf("%d",&zap[j].x2);
 puts("vvedi y2");
 fflush(stdin);
 scanf("%d",&zap[j].y2);
fwrite(&zap[j], size, 1, Fzap);
 
if ((zap[j].x2>zap[j].x1) && (zap[j].y2<zap[j].y1)) {
S=fabs((zap[j].x2-zap[j].x1)*(zap[j].y1-zap[j].y2));
fwrite(&S, size, 1, Fzap); }
else puts("\n nevernoe yslovie");
}
 fclose(Fzap);
 
 
Fzap=fopen("d:\\koord.txt","rb");
if (!Fzap) {puts("can't open it"); exit(1);}
for (j=0; j<N; j++)
{fread(&zap,1,size,Fzap);
 
puts("\ninfo");
    printf("%3d %3d %3d %3d %5d\n",zap[j].x1, zap[j].y1,zap[j].x2,zap[j].y2, S);
}
 
   fclose(Fzap);
getch();
}
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
29.06.2011, 19:11 4
katish12, koord.txt приаттачте пожалуйста.
0
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 9
29.06.2011, 19:18  [ТС] 5
а можно поподробнее, мне просто "приаттачте" ничего не говорит
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
29.06.2011, 19:24 6
katish12, просто хотелось пример входного файла, но я уже разобрался.
Цитата Сообщение от katish12 Посмотреть сообщение
C
1
fwrite(&zap[j], size, 1, Fzap); if ((zap[j].x2>zap[j].x1) && (zap[j].y2<zap[j].y1)) { S=fabs((zap[j].x2-zap[j].x1)*(zap[j].y1-zap[j].y2)); fwrite(&S, size, 1, Fzap); } else puts("\n nevernoe yslovie"); }
строка 35
вы то что ввел пользователь сначала пишите в файл, затем проверяете условие, если условие верно, то расчитываете площади и затем пишите ее в файл. так и должно быть ?
0
0 / 0 / 0
Регистрация: 31.03.2011
Сообщений: 9
29.06.2011, 19:28  [ТС] 7
точно, надо наоборот, сначала ввести данные, проверить а потом записать
спасибо, попробую исправить
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
29.06.2011, 20:01 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

теперь внимательно изучите строки с 48 по 51. что вы читаете и что вы пишите в консоль ? откуда берется значение переменной S ?

Добавлено через 17 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#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;
}
0
29.06.2011, 20:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2011, 20:01
Помогаю со студенческими работами здесь

Вычислить площадь и периметр прямоугольника
Вычислить площадь ,периметр прямоугольника ,оформить расчеты как подпрограмму-процедуры .

Найти стороны прямоугольника, зная его площадь
дано натуральное число K,выражающее площадь прямоугольника.Найти все целые значения сторон

Даны стороны прямоугольника a и b. Найти его площадь и периметр
Даны стороны прямоугольника a и b. Найти его площадь и периметр

Напечатать площадь прямоугольника, заключённого между двумя парами прямых
д.з.1. Написать программу, которая запрашивает у пользователя два значения координат по оси x и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru