Подскажите как переделать программу в динамическую память - 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));

Объяснение кода листинга программы

  1. Объявляется указатель на структуру PROZESOSOR типа *Pr.
  2. С помощью функции malloc() выделяется память под массив структур PROZESOSOR, размер которого определяется переменной num.
  3. В операторе присваивания (assign) указателю Pr присваивается адрес начала массива структур PROZESOSOR.
  4. Полученный указатель на массив структур PROZESOSOR приводится к типу PROZESOSOR *.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы