Не получается динамически увеличить массив структур "Отрезок" "Прямоугольник" - C (СИ)
Формулировка задачи:
Делая следующее задание наткунлся на проблему
Код выглядит так:
Ошибка как я понял происходит при попытке увеличит массив в этой функции:
Определить структуры: отрезок (задан длиной) и прямоугольник (задан 2-мя отрезками). Реализовать функции:
1. для инициализации динамического прямоугольника по двум отрезкам.
2. search() - поиск прямоугольников подобных заданному в статическом массиве прямоугольников (результат поместить в динамический массив прямоугольников).
3. Печать информации о прямоугольнике
Создать два динамических прямоугольника (данные вводить с клавиатуры), определить прямоугольник с большей площадью. Определить статический массив прямоугольников, используя датчик случайных чисел и функцию. Найти все прямоугольники, подобные первому в статическом массиве.
// bdz1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> #include <time.h> #include <windows.h> #include <clocale> #include <cmath> #define LEN 10 #define LLL 10 struct line { int L; }; struct rect { struct line l1; struct line l2; }; struct rect T[1]; struct rect* init() { const int leng = LLL; static struct rect R[leng]; for(int i = 0; i < leng; i++) { R[i].l1.L=(int)(rand()%LEN); R[i].l2.L=(int)(rand()%LEN); } return(R); } void printR(struct rect R[], int l = LLL) { for(int i = 0; i < l; i++) printf("Прямоугольник %i\t%ix%i\n",i,R[i].l1.L,R[i].l2.L); } void search(struct rect R[], struct rect S, struct rect *T, int &k)//sdgfdgfgfgh { for(int i = 0; i < LLL; i++) { if((R[i].l1.L/R[i].l2.L == S.l1.L/S.l2.L) || (R[i].l2.L/R[i].l1.L == S.l2.L/S.l1.L)) { T = (struct rect*) realloc (T, (k+1) * sizeof(struct rect)); T[k] = R[i]; k++; } } } int _tmain(int argc, _TCHAR* argv[]) { setlocale(0,"Russian"); srand (time(0)); struct rect R1; struct rect R2; printf("Первый прямоугольник: введите длинну 1-ой: "); scanf("%d", &R1.l1.L); printf("Первый прямоугольник: введите длинну 2-ой: "); scanf("%d", &R1.l2.L); printf("Второй прямоугольник: введите длинну 1-ой: "); scanf("%d", &R2.l1.L); printf("Второй прямоугольник: введите длинну 2-ой: "); scanf("%d", &R2.l2.L); if(R1.l1.L * R1.l2.L > R2.l1.L * R2.l2.L) printf("\nПервый прямоугольник больше\n\n"); else if(R1.l1.L * R1.l2.L < R2.l1.L * R2.l2.L) printf("\nВторой прямоугольник больше\n\n"); else printf("\nПрямоугольники равны\n\n"); static struct rect *RR = init(); printR(RR); int k = 0; search(RR,R1,T,k); printR(T, k); return 0; }
struct line { int L; }; struct rect { struct line l1; struct line l2; }; struct rect T[1]; ... void search(struct rect R[], struct rect S, struct rect *T, int &k)//sdgfdgfgfgh { for(int i = 0; i < LLL; i++) { if((R[i].l1.L/R[i].l2.L == S.l1.L/S.l2.L) || (R[i].l2.L/R[i].l1.L == S.l2.L/S.l1.L)) { T = (struct rect*) realloc (T, (k+1) * sizeof(struct rect)); T[k] = R[i]; k++; } } }
Решение задачи: «Не получается динамически увеличить массив структур "Отрезок" "Прямоугольник"»
textual
Листинг программы
struct rect* init() { const int leng = LLL; static struct rect* R = malloc(sizeof(struct rect) * leng); for(int i = 0; i < leng; i++) { R[i].l1.L=(int)(rand()%LEN); R[i].l2.L=(int)(rand()%LEN); } return(R); }
Объяснение кода листинга программы
В данном коде выполняется инициализация массива структур Отрезок
Прямоугольник
динамически, то есть во время выполнения программы.
- Объявляется константа
leng
(вместо неё может быть любое другое имя, но в данном случае используется LLL), которая определяет размер массива. - Выделяется память под массив структур
Отрезок
Прямоугольник
с помощью функции malloc (вместо неё можно использовать calloc, тогда все элементы массива будут инициализированы нулями). - В цикле происходит заполнение массива структур
Отрезок
Прямоугольник
. Для этого используется генератор случайных чисел, который выдаёт случайное число от 0 до LEN (включительно). - Функция возвращает указатель на первый элемент массива.
Пользователь может вызвать функцию init для инициализации массива структур
Отрезок
Прямоугольник
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д