Подскажите как переделать программу в динамическую память - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{setlocale(LC_ALL,"RU");
int flag=1,Demon,god;
typedef struct{
char prois[11];
char model[16];
int chastota ;
int KschD;
int KschK;
int str;
unsigned num;
} PROZESOSOR;
unsigned int num = 0;
printf("Введите число процесоров: "); scanf("%u",&num);//
PROZESOSOR Pr[num];
for(int i=0;i<num;i++){
fflush(stdin);
strcpy(Pr[i].prois,"");
strcpy(Pr[i].model,"");
char str[150];
gets(str);//sscanf(str,"%s %s (%d ,%d ,%d)",Pr[i].prois,Pr[i].model,&Pr[i].chastota,&Pr[i].KschD ,&Pr[i].KschK,&Pr[i].str);
sscanf(str,"%s %s (%d ,%d ,%d)",&Pr[i].prois[i],&Pr[i].model[i],&Pr[i].chastota,&Pr[i].KschD ,&Pr[i].KschK,&Pr[i].str);//
if(Pr[i].KschK>32000 || Pr[i].KschD>32000 || Pr[i].chastota>10000){printf("Введено не верное значение");return 0;}}
puts("-----------------------------------------");
while(flag){
flag=0;
printf("ВВедите частоту процесоров");
fflush(stdin);
scanf("%d %d",&Demon,&god);//
if(Demon>god || Demon>32000 || god>32000) {printf("Неверно введина частота \n"); flag=1;}
}
fflush(stdin);
while(flag){
flag = 0;
for(int i=0;i<num-1;i++){
int res = strcmp(Pr[i].prois,Pr[i+1].prois);
if(res>0){
PROZESOSOR vr = Pr[i];
Pr[i] = Pr[i+1];
Pr[i+1] = vr;
flag = 1;
}
else if(res==0)
if(Pr[i].str>Pr[i+1].str){
PROZESOSOR vr = Pr[i];
Pr[i] = Pr[i+1];
Pr[i+1] = vr;
flag = 1;
}
}
}
puts("Список процесоров ");
for(int i=0;i<num;i++){
if(Pr[i].chastota>=Demon && Pr[i].chastota<=god)
printf("%s %s (%d ,%d ,%d)",Pr[i].prois,Pr[i].model,Pr[i].chastota,Pr[i].KschD,Pr[i].KschK,Pr[i].str);
}
puts("---------------------------------------------");
return 0;}Решение задачи: «Подскажите как переделать программу в динамическую память»
textual
Листинг программы
PROZESOSOR *Pr; Pr = (PROZESOSOR *)malloc(num*sizeof(PROZESOSOR));
Объяснение кода листинга программы
- Объявляется указатель на структуру PROZESOSOR типа *Pr.
- С помощью функции malloc() выделяется память под массив структур PROZESOSOR, размер которого определяется переменной num.
- В операторе присваивания (assign) указателю Pr присваивается адрес начала массива структур PROZESOSOR.
- Полученный указатель на массив структур PROZESOSOR приводится к типу PROZESOSOR *.