Подскажите как переделать программу в динамическую память - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. int main(void)
  6. {setlocale(LC_ALL,"RU");
  7. int flag=1,Demon,god;
  8. typedef struct{
  9. char prois[11];
  10. char model[16];
  11. int chastota ;
  12. int KschD;
  13. int KschK;
  14. int str;
  15. unsigned num;
  16. } PROZESOSOR;
  17. unsigned int num = 0;
  18. printf("Введите число процесоров: "); scanf("%u",&num);//
  19. PROZESOSOR Pr[num];
  20.  
  21. for(int i=0;i<num;i++){
  22. fflush(stdin);
  23. strcpy(Pr[i].prois,"");
  24. strcpy(Pr[i].model,"");
  25. char str[150];
  26. 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);
  27. 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);//
  28. if(Pr[i].KschK>32000 || Pr[i].KschD>32000 || Pr[i].chastota>10000){printf("Введено не верное значение");return 0;}}
  29.  
  30. puts("-----------------------------------------");
  31. while(flag){
  32. flag=0;
  33. printf("ВВедите частоту процесоров");
  34. fflush(stdin);
  35. scanf("%d %d",&Demon,&god);//
  36. if(Demon>god || Demon>32000 || god>32000) {printf("Неверно введина частота \n"); flag=1;}
  37. }
  38. fflush(stdin);
  39. while(flag){
  40. flag = 0;
  41. for(int i=0;i<num-1;i++){
  42. int res = strcmp(Pr[i].prois,Pr[i+1].prois);
  43. if(res>0){
  44. PROZESOSOR vr = Pr[i];
  45. Pr[i] = Pr[i+1];
  46. Pr[i+1] = vr;
  47. flag = 1;
  48. }
  49. else if(res==0)
  50. if(Pr[i].str>Pr[i+1].str){
  51. PROZESOSOR vr = Pr[i];
  52. Pr[i] = Pr[i+1];
  53. Pr[i+1] = vr;
  54. flag = 1;
  55. }
  56. }
  57. }
  58.  
  59. puts("Список процесоров ");
  60. for(int i=0;i<num;i++){
  61. if(Pr[i].chastota>=Demon && Pr[i].chastota<=god)
  62. printf("%s %s (%d ,%d ,%d)",Pr[i].prois,Pr[i].model,Pr[i].chastota,Pr[i].KschD,Pr[i].KschK,Pr[i].str);
  63. }
  64. puts("---------------------------------------------");
  65. return 0;}
+ кто тому нужно чтобы количество строк не вводилось а ввод продолжался до ввода пустой строки

Решение задачи: «Подскажите как переделать программу в динамическую память»

textual
Листинг программы
  1. PROZESOSOR *Pr;
  2. Pr = (PROZESOSOR *)malloc(num*sizeof(PROZESOSOR));

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

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

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


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

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

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы