Подскажите как переделать программу в динамическую память - 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 *.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д