Описать тип struct - C (СИ)

  1. Описать тип struct Rectangle, задающий на плоскости замкнутый прямоугольник со сторонами, параллельными координатным осям и габаритами (x–, x+) и (y–, y+) по осям абсцисс и ординат соответственно. Реализовать в виде отдельных функций следующие операции над переменными этого типа: а) вычисление площади прямоугольника; б) построение прямоугольника по паре точек, задающих любую пару противолежащих вершин; в) построение пересечения двух прямоугольников; г) проверка принадлежности точки прямоугольнику; д) проверка включения одного прямоугольника в другой; е) поворот прямоугольника относительно центра на прямой угол. С использованием описанных типа и функций разработать программу, которая для заданного набора из N прямоугольников находит:1) площадь наименьшего из прямоугольников, содержащего в себе один и более прямоугольников из заданного набора; 2) все пары прямоугольников, совпадающих с точностью до поворота напрямой угол. Не знаю как сделать пункты, выделенные жирным. Помогите


textual

Код к задаче: «Описать тип struct - C (СИ)»

#include <stdio.h> 
#include <windows.h> 
 
typedef struct{ 
int x;//координата 
int y;//координата 
}Rectangle; 
Rectangle q[100]; 
typedef struct{
    int x;
    int y;
}Point;
Point A;
Point B;
 
void main() 
{ 
    SetConsoleOutputCP(1251); 
 
    int N;//количество прямоугольников 
    int i;//счетчик 
    printf("Сколько дано прямоугольников?"); 
    scanf("%d",&N); 
 
    for(i=0;i<N;i++) 
    { 
        printf("Введите габариты: "); 
        scanf("%d%d",&q[i].x,&q[i].y); 
    } 
    system("pause");
} 
 
/*функция а)вычисление площади прямоугольника*/
float Area(Rectangle q){ 
    float S=0; 
    S=2*fabs(q.x)*2*fabs(q.y); 
    return S; 
}
/*функция б)построение прямоугольника по паре точек, задающих любую пару противолежащих вершин*/
Rectangle For_two_points(Point A,Point B){
    Rectangle P;
    P.x=fabs((B.x-A.x)/2);
    P.y=fabs((B.y-A.y)/2);
    return P;
}
/*функция в)построение пересечения двух прямоугольников*/
Rectangle Crossing(){
 
}
/*функция г) проверка принадлежности точки прямоугольнику*/
int Point_in_rectangle(){
 
}
/*функция д) проверка включения одного прямоугольника в другой*/
int Inside(){
 
}
/*функция е) поворот прямоугольника относительно центра на прямой угол*/
Rectangle Turning(Rectangle q){
int c;
c=q.x;
q.x=q.y;
q.y=c
}

СДЕЛАЙТЕ РЕПОСТ

11   голосов, оценка 3.636 из 5



Похожие ответы
  1. Нужно описать алгоритм этой программы. Написать, что делает каждая строка в этом коде. C1 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 printf("Введите время вылета и прилета с А в Б (hh:mm)\n");        for(i = 0; i < 4; i++)      {         scanf("%d:%d", &h[i], &m[i]);         t[i] = (h[i]*60 + m[i]);          if(h[i]>=24)        {         printf("Недопустимое значение\n");         system("pause");           return main();        }         if(m[i]>60)        {         printf("Недопустимое значение\n");         system("pause");           return main();         }         if (i==1)         {             printf("Введите время вылета и прилета с Б в А (hh:mm)\n");              continue;         }      }              if(t[0]>t[1])          t[1] += 24*60;          if(t[2]>t[3])          t[3] += 24*60;           r = fabs((double)(t[1] - t[0] + t[3] - t[2]) / 2+0.5);           rh = (r%(24*60)) / 60;         rm = r % 60;            printf("Время полета : %2.2d:%2.2d\n", rh, rm);          system("pause");         return main();

  1. Помогите, пожалуйста, с программой. Необходимо написать абстрактный тип данных (полиморфную коллекцию), поэтому использован указатель типа void. Программа вылетает сразу после того, как выбираем необходимый для работы тип данных. C1 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 122 123 124 125 #include #include #include struct matrix {     int size_of_matrix;     void* pointer_Undefined_Object; } Matrix;     void get_memory(int size_of_matrix, matrix* p) {     struct matrix M;     int z, k;      p = &M;     M.size_of_matrix = size_of_matrix;     if (size_of_matrix > 0) {             printf("For work with integer humbers choose 1, for work with float - 0\n");         scanf_s("%d", &z);         if (z = 0)         {             k = sizeof(float);           }         else         {             k = sizeof(int);           }         M.pointer_Undefined_Object = malloc(M.size_of_matrix*M.size_of_matrix * k);                     } } void create_matrix_float(int size_of_matrix, matrix* p) {     struct matrix M;     p = &M;     M.size_of_matrix = size_of_matrix;     {           for (int i = 0; i <= M.size_of_matrix; i++)         {             for (int j = 0; j <= M.size_of_matrix; j++)             {                 printf("Enter  componets of matrix >> ");                 scanf_s("%f", (((float*)M.pointer_Undefined_Object + i) + j));                 }         }             for (int i = 0; i < M.size_of_matrix; i++)         {             for (int j = 0; j < M.size_of_matrix; j++)             {                 printf("%6.1f", *(((float*)M.pointer_Undefined_Object + i) + j));                 }             printf("\n");         }       } }   void create_matrix_int(int size_of_matrix, matrix* p)   {     struct matrix M;     p = &M;     for (int i = 0; i <= M.size_of_matrix; i++)     {         for (int j = 0; j <= M.size_of_matrix; j++)         {             printf("Enter  componets of matrix >> ");             scanf_s("%f", (((int*)M.pointer_Undefined_Object + i) + j));             }     }         for (int i = 0; i < M.size_of_matrix; i++)     {         for (int j = 0; j < M.size_of_matrix; j++)         {             printf("%6.1f", *(((int*)M.pointer_Undefined_Object + i) + j));             }         printf("\n");     }   }   void main()       {     struct matrix M;     matrix* p = &M;       int z;     int size_of_matrix;     printf("Enter the size of matrix >>");     scanf_s("%d", &size_of_matrix);             printf("For work with integer humbers choose 1, for work with float - 0\n");     scanf_s("%d", &z);     if (z = 0)     {         create_matrix_float(size_of_matrix, p);     }     else     {         create_matrix_int(size_of_matrix, p);     }         }

  1. Добрый день всем! Есть массив, который заполняется трехзначным числом, введенным с клавиатуры (UART_ComBody[2]), надо перевести его в число типа int. (для вычисления) Например, вводим число 143. Оно в массиве будет выглядеть так:C1 2 3 UART0_ComBody[0] = 1; UART0_ComBody[1] = 4; UART0_ComBody[2] = 3;

  1. Добрый день!C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include   int main() {     unsigned long n;     printf("n = ");     scanf("%u", &n);       unsigned long a, b;     for (a = 2; a <= n; a++) {         b = sum_div(a);         if (a < b && a == sum_div(b))             printf("%d   %d\n", a, b);     } }   unsigned long sum_div(unsigned long num) {     unsigned long i, sum = 1, lim = sqrt(num);     short d = (num % 2) ? 2 : 1;     for (i = 1 + d; i <= lim; i += d)         if (num % i == 0)             sum += i + num / i;     return sum; }Компилятор ругается на 17 строчку, но не пойму что не так?

  1. Коллеги! Прошу помочь! Создаю символьный динамический массив (выделяю под него память). С клавиатуры задаю его размерность, а потом пытаюсь заполнить его с помощью написанной мной стандартной функции и функции getchar(), но в массив вводится в два раза меньше элементов чем было предусмотрено при его создании. В чём причина?C1 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 #include #include   char* vvod_1char (char*x, int n) {         for (int i=0;i

  1. В чём проблема и как починить? C1 2 3 4 5 6 7 8 9 10 11 12 13 struct listNode { char data; struct listNode *nextPtr; }; typedef struct listNode LISTNODE; typedef LISTNODE *LISTNODEPTR; void insert (LISTNODEPTR *, char); ... void insert(LISTNODEPTR *sPtr, char value) { LISTNODEPTR newPtr, previousPtr, currentPtr; newPtr= (malloc (sizeof (LISTNODEPTR))); ... В последней строке ошибки: error C2440: =: невозможно преобразовать "void*" в "LISTNODEPTR" IntelliSense: значение типа "void*" нельзя присвоить сущности типа "LISTNODEPTR"

  1. Здравствуйте! Начал изучать Язык С, в книжке написано: Указатели на void Любой указатель на объект можно привести к типу void * без потери информации. Если результат подвергнуть обратному преобразованию, то мы получим прежний указатель. В отличие от преобразований указатель-в-указатель, которые требуют явных операторов приведения к типу, в присваиваниях и сравнениях указатель любого типа может выступать в паре с указателем типа void * без каких-либо предварительных преобразований типа. Только не понятно зачем нужны такие преобразования? Не могли бы подсказать, в каких случаях нужно делать преобразование какого-либо указателя на тип void*?

  1. Буду благодарен, если кто-то объяснит, как работает данная программа построчно (отлично будет, если написать комментарии к каждой строке (кроме самых очевидных)), либо напишет программу попроще. Задача была следующая: напишите функцию expand(s1,s2), которая бы разворачивала сокращенную запись наподобие a-z в строке s1 в полный список abc...xyz в строке s2. Учитывайте буквы в любом регистре, цифры, а также записи вида a-b-c, a-z0-9 и -a-z. Сделайте так, чтобы знаки - в начале и в конце строки воспринимались буквально, а не как символы развертывания. Спасибо.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void expand(char s1[], char s2[]) {     int i, j, k;     k = 0;     for (i = 0; s1[i] != '\0'; i++)         if (s1[i] == '-')             if (i == 0 || s1[i+1] == '\0')                 s2[k++] = '-';             else                 for (j = s1[i-1]; j <= s1[i+1]; j++)                     s2[k++] = j;     s2[k] = '\0'; }   int main(void) {     char s1[] = "-a-z0-9d-f-";     char s2[128] = "";     expand(s1, s2);     printf("s1=%s\ns2=%s\n", s1, s2);     return 0; } }

  1. Известны оценки каждого из 22 учеников класса по четырем предметам. Определить фамилию одного из учеников, имеющих максимальную сумму оценок. Помогите в си,пожалйста