Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Nescafe32
5 / 5 / 2
Регистрация: 07.05.2014
Сообщений: 101
1

Определить прямоугольники, которые находятся внутри первого и их отсортировать по возрастанию площади

20.10.2014, 20:49. Просмотров 348. Ответов 0
Метки нет (Все метки)

Условие:
Вводятся координаты левой верхней и правой нижней вершин прямоугольника. Нужно вывести входные данные, определить прямоугольники, которые находятся внутри первого и их отсортировать по возрастанию площади
Что нужно:
Код рабочий, НО нужно заменить все, что только можно, на указатели!
P.S. для себя хочу понять как считывать координаты с помощью двух стрелок (то есть, чтобы вместо двух точек в mas[i].lv.x были две стрелки)
Собственно, код:
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <stdio.h>
#include <conio.h>
#include <windows.h>
 
#define N 6
 
    struct tochka{
        int x,y;
    };
 
     typedef struct pryam{
        tochka lv; // левая верхняя точка
        tochka pn; // правая нижняя точка
        int S;
        char popad;
        int viv;
    }FIG;
 
int read(FIG mas[],int count_of_scaned_pryam);
void sort(FIG mas[],int counter);
void ploshad(FIG mas[], int K);
int form_mas(FIG mas[],int ,int counter);
void write_input(FIG mas[],int count_of_scaned_pryam,int counter);
void write_sort(FIG mas[],int counter);
 
int main(){
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    FIG arr[N];
    int count_of_scaned_pryam=0; // общее количество прямоугольников
    count_of_scaned_pryam = read(arr,count_of_scaned_pryam);
 
    int count_inside_first=0; // количество прямоугольников, попадающих в первый
    count_inside_first=form_mas(arr,count_of_scaned_pryam,count_inside_first);
 
    //system("cls");
    write_input(arr,count_of_scaned_pryam,count_inside_first); // вывод входных данных
    sort(arr,count_inside_first); // вызов функции сортировки массива площадей
    printf("\n");
    write_sort(arr,count_inside_first); // вывод отсортированного массива площадей
    getch();
}
 
int read(FIG mas[],int zag_kilk_pryam){
 
    printf("Введите координаты прямоугольников (х, у)\n");
    for (int i=0; i<N;i++){
        printf("%d-й прямоугольников:\n",i+1);
        if(scanf("%d",&mas[i].lv.x)==0) break;
        if(scanf("%d",&mas[i].lv.y)==0) break;
        if(scanf("%d",&mas[i].pn.x)==0) break;
        if(scanf("%d",&mas[i].pn.y)==0) break;
        zag_kilk_pryam++;
    }
        return zag_kilk_pryam;
}
 
int form_mas(FIG mas[],int zag_kilk_pryam,int counter){
    int M=0;
    for (int i=0; i<zag_kilk_pryam;i++){
        if((mas[i].lv.y<=mas[0].lv.y)&&(mas[i].pn.x<=mas[0].pn.x)&&(mas[i].lv.x>=mas[0].lv.x)&&(mas[i].pn.y>=mas[0].pn.y)) { //если прямоугольник входит в основной
            mas[i].popad='+';
            mas[M++].viv=i+1; // заносим его номер в массив
            counter++; // и увеличиваем количество таких прямоугольников
            ploshad(mas,counter-1);
        }   
        else 
           mas[i].popad='-';
    }
    return counter;
}
 
void ploshad(FIG mas[], int K){
    int visota=abs(mas[K].lv.y - mas[K].pn.y);
    int shirina=abs(mas[K].lv.x - mas[K].pn.x);
    mas[K++].S=visota*shirina;
}
 
    
void sort(FIG mas[],int counter){ // сортировка пузырьком 
 
    for(int p=0;p<counter-1;p++){ 
        for(int j=p+1;j<counter;j++){
            if(mas[j].S<mas[p].S){
                FIG dod;
                dod=mas[j];
                mas[j]=mas[p];
                mas[p]=dod;
            }
        }
    }
}
 
void write_input(FIG mas[], int zag_kilk_pryam,int counter){ // вывод входных данных
 
    printf("|----------------------------------------------------|\n");
    printf("|  Прямоугольник\t Координаты\tПопадание в первый прямоугольник |\n");
    printf("|----------------------------------------------------|\n");
      for (int i=0; i<zag_kilk_pryam;i++){
        printf("|%4d\t\t(%d %d) (%d %d)\t\t%c\t     |\n",i+1,   mas[i].lv.x,mas[i].lv.y,mas[i].pn.x,mas[i].pn.y,mas[i].popad);
        printf("|----------------------------------------------------|\n");
      }
     if(counter==1){
        printf("\n");
        printf("Таких прямоугольников не обнаружено!");
        getch();
        exit(0);
     }  
}
 
void write_sort(FIG mas[],int counter){ // выводим прямоугольники, попадающие в первый
 
    printf("|------------------------------------|\n");
    printf("|  Прямоугольник\tСортировка по площади |\n");
    printf("|------------------------------------|\n");
    for(int i=0;i<counter;i++) {
        printf("|%4d\t\t\t %d           |\n",mas[i].viv,mas[i].S); 
        printf("|------------------------------------|\n");
    }
}
P.S.S. Очень прошу исправить без помощи рекурсии и просто заменить то, что есть на указатели. Не дружу с ними, поэтому прошу вашей помощи

Добавлено через 22 часа 12 минут
Помогите, пожалуйста, нужно сдать послезавтра
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2014, 20:49
Ответы с готовыми решениями:

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

Отсортировать массив с первого элемента до P элемента по возрастанию
Ребята, выручите. Задание - есть одномерный массив из 20 элементов. Ее надо...

Подсчитать количество точек, которые находятся внутри шара
задано случайное множество точек в пространстве и шар заданного радиуса....

даны стороны двух прямоугольников. определить, будут ли эти прямоугольники равновеликими, т.е имеют ли они равные площади.
программирование алгоритмов разветляющейся структуры. (для программирования...

Среди элементов строки убрать те которые находятся внутри скобок
Среди эллементов строки убрать те которые находятся внутри скобок . Н емогу...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2014, 20:49

Удалить теги ссылок, которые находятся внутри тега Tittle
Суть задачи такова: нужно удалить теги ссылок, которые находятся внутри тега...

Сформировать P — подмножество M, содержащее точки, которые находятся внутри замкнутой области
Заданы уравнения трех кривых на плоскости. Одно из уравнений содержит...

Вывести количество точек, которые находятся внутри окружности либо на ее границе
Вводится x0,y0,r,n Координаты n точак x0,y0-центр окружности r-радиус...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru