Я учусь на первом курсе, и я начинаю свое приключение с программирования на одном языке C. Мне дали задание, что я понятия не имею, как это сделать. В этой программе мне нужно использовать mallo c, пустые функции, указатели и структуры.
Это задание:
1. Создайте заранее определенное количество фигур. Выделите память для этих фигур, используя mallo c.
2. Добавьте новую фигуру.
3. Удалите случайную фигуру.
4.Добавить точку к случайной фигуре.
5.Снять случайную точку с фигуры.
6. Показать все фигуры. Если фигура имеет 1 точку, выведите «это точка». Если фигура имеет 2 точки, выведите «это линия». Если фигура имеет 3 точки, выведите «это треугольник» .et c
Программа должна состоять из следующих строк (но вы можете добавить некоторые вещи).
struct Point
{
int x, y;
};
struct Figura
{
unsigned short size;
struct Point **p;
};
This это мой нелогичный код со странным подходом.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <time.h>
#include <string.h>
#define SIZE 20
struct Point{
int x;
int y;
};
struct figure{
unsigned short size;
struct Point **p;//I have no idea how to work with this.
char figure[SIZE];
};
void create_space_for_points(struct Point ***point,int beginning_quanity);
void create_space_for_figures(struct figure ***figure,int beginning_quanity);
void ceating_base_of_figures(struct Point **point,struct figure **figure,int beginning_quanity,int *quanity,int *sum_of_points);
void adding_figure(struct Point ***point,struct figure ***figure,int *quanity,int *sum_of_points);
void showing_figures(struct figure **figure,int quanity);
int main()
{
struct figure **figure;
struct Point **point;
int beginning_quanity;
int *quanity=0;
int *sum_of_points=0;
printf("How many figures do you want to create?: ");
scanf("%d",&beginning_quanity);
//At this stage I am creating separate space for point and figures.
create_space_for_points(&point,beginning_quanity);
create_space_for_figures(&figure,beginning_quanity);
ceating_base_of_figures(point,figure,beginning_quanity,&quanity,&sum_of_points);//At this stage sometime it doesn't work. Maybe because of the memory.
adding_figure(&point,&figure,&quanity,&sum_of_points);//new figure is added at the end of list.
showing_figures(figure,quanity);
return 0;
}
//I am sure I made a mistake with memory allocation but I don't know where.
void create_space_for_points(struct Point ***point,int beginning_quanity){
struct Point **temp1=(struct Point**)malloc(beginning_quanity*sizeof(struct Point))
for(int i=0;i<beginning_quanity;i++)
temp1[i]=(struct Point*)malloc(beginning_quanity*sizeof(struct Point));
*point=temp1;
}
void create_space_for_figures(struct figure ***figure,int beginning_quanity){
struct figure **temp=(struct figure**)malloc(beginning_quanity*sizeof(struct figure));
for(int i=0;i<beginning_quanity;i++)
temp[i]=(struct figure*)malloc(sizeof(struct figure));
*figure=temp;
}
void ceating_base_of_figures(struct Point **point,struct figure **figure,int beginning_quanity,int *quanity,int *sum_of_points){
int number_of_points=0,i;
srand(time(NULL));
char word[SIZE];
for( i=0;i<beginning_quanity;i++){
char figures[SIZE];
for(int j=0;j<rand()%5+1;j++){
point[j]->x=rand()%10;
point[j]->y=rand()%10;
//printf("%d %d\n",punkt[j]->x,punkt[j]->y);
number_of_points++;
}
printf("-------Number of points-------\n%d",number_of_points);
if(number_of_points==1){
printf("----point----\n");
strcpy(word,"point");
strcpy(figure[i]->figure,word);
}
if(number_of_points==2){
printf("----line----\n");
strcpy(word,"line");
strcpy(figure[i]->figure,word);
}
if(number_of_points==3){
printf("----triangle----\n");
strcpy(word,"triangle");
strcpy(figure[i]->figure,word);
}
if(number_of_points==4){
printf("----square----\n");
strcpy(word,"square");
strcpy(figure[i]->figure,word);
}
if(number_of_points==5){
printf("----pentagon----");
strcpy(word,"pentagon");
strcpy(figure[i]->figure,word);
}
printf("\n");
*quanity=beginning_quanity;
sum_of_points+=number_of_points;
number_of_points=0;
}
printf("Number of figures: %d\n",*quanity);
}
void adding_figure(struct Point ***point,struct figure ***figure,int *quanity,int *sum_of_points){
int number_of_points;
char word[SIZE];
printf("How many points should a new figure have: ");
scanf("%d",&number_of_points);
int new_size=*quanity+1;
struct figure **temp=(struct figure **)malloc((new_size)*sizeof(struct figure*));
for(int i=0;i<*quanity;i++)
temp[i]=(*figure)[i];
temp[*quanity]=(struct figure*)malloc(sizeof(struct figure));
if(number_of_points==1){
strcpy(word,"point");
strcpy(temp[*quanity]->figure,word);
}
if(number_of_points==2){
strcpy(word,"line");
strcpy(temp[*quanity]->figure,word);
}
if(number_of_points==3){
strcpy(word,"triangle");
strcpy(temp[*quanity]->figure,word);
}
if(number_of_points==4){
strcpy(word,"square");
strcpy(temp[*quanity]->figure,word);
}
if(number_of_points==5){
strcpy(word,"pentagon");
strcpy(temp[*quanity]->figure,word);
}
free(*figure);
*figure=temp;
++(*quanity);
printf("\n");
printf("new number of figures: %d\n",*quanity);
number_of_points=0;
}
void showing_figures(struct figure **figure,int quanity){
for(int i=0;i<quanity;i++)
printf("----%s----\n",figure[i]->figure);
}
Я застрял при удалении фигур и даже не уверен, правильно ли я использовал структуры, и я совершенно не знаю, как добавить случайную точку к цифра или удалить один.