Перевести код с Pascal - C (СИ) (76842)

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

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

Листинг программы
  1. var N:integer;
  2. a:array[0..1000] of integer;
  3. function Min(m1,m2:integer):integer;
  4. begin
  5. if(m1>m2) then Min:=m2
  6. else Min:=m1;
  7. end;
  8. procedure output(count:integer);
  9. var i:integer;
  10. begin
  11. write(a[1]);
  12. for i:=2 to count do
  13. write('+',a[i]);
  14. writeln;
  15. end;
  16. procedure p(k,summ:integer);
  17. var i:integer;
  18. begin
  19. if(summ=N) and (k>2) then output(k-1);
  20. if summ<N then
  21. begin
  22. for i:=1 to Min(N-summ,a[k-1]) do
  23. begin
  24. a[k]:=i;
  25. p(k+1,summ+i);
  26. end;
  27. end;
  28. end;
  29. begin
  30. a[0]:=MaxInt;
  31. readln(N);
  32. p(1,0);
  33. readln;
  34. end.

Решение задачи: «Перевести код с Pascal»

textual
Листинг программы
  1. #include <stdio.h>
  2. // библиотека ввода/вывода (scanf/printf)
  3. #include <conio.h>
  4. // включает функцию getch();
  5. #define Min( a, b ) ( ((a) < (b)) ? (a) : (b) )
  6. // задает функцию Min(a,b) - если А меньше Б, возвращает А, иначе возвращает Б
  7. #define MaxInt 32767;
  8. // в паскале есть эта константа, тут пришлось задавать так
  9. int N,a[1000]; /* n:integer; a:array[0..1000] of integer; */
  10. void output(int count); /* задание прототипа процедуры output(count:integer); */
  11. void p(int k,int summ); /* задание прототипа процедуры p(k,summ:integer); */
  12. int main(int argc, char* argv[]) /* основная программа */
  13. { /* begin */
  14.         a[0]=MaxInt; /* a[0]:=MaxInt; */
  15.         scanf("%i",&N); /* readln(N); */
  16.         p(1,0);
  17.         getch(); /* ждёт нажатие любой клавиши перед закрытием программы */
  18.         return 0;
  19. }
  20. void output(int count) /* procedure output(count:integer); */
  21. {
  22.         int i; /* i:integer; */
  23.         printf("%i",a[1]); /* write(a[1]); */
  24.         for(i=2;i<=count;i++) /* for i=2 to count do*/
  25.                 printf("+%i",a[i]); /* write(a[i]); */
  26.         printf("\n"); /* writeln(); */
  27. }
  28. void p(int k,int summ) /* procedure p(k,summ:integer) */
  29. {
  30.         int i;
  31.         if ((summ==N)&&(k>2)) output(k-1); /* if (summ=N) and (k>2) then output(k-1); */
  32.         if (summ<N){
  33.                 for(i=1;i<=Min(N-summ,a[k-1]);i++){ /* for i=1 to Min(N-summ,a[k-1]) do begin */
  34.                 a[k]=i;
  35.                 p(k+1,summ+i);
  36.                 }
  37.         }
  38. }

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

  1. Включаются необходимые библиотеки для ввода/вывода и функции Min и MaxInt.
  2. Объявляются переменные N и массив a размером 1000.
  3. Определяются прототипы функций output и p.
  4. В функции main инициализируется первый элемент массива a значением MaxInt и считывается значение N с помощью scanf.
  5. Вызывается функция p(1,0) для начального заполнения массива.
  6. В функции output выводится значение первого элемента массива a и последовательно добавляются значения остальных элементов до указанного счётчика.
  7. В функции p проверяется условие: если сумма текущих элементов равна N и индекс больше 2, то вызывается функция output для предыдущего элемента.
  8. Если сумма текущих элементов меньше N, то в цикле добавляются значения от 1 до минимального значения (N-summ) и вызывается функция p для следующего элемента.
  9. В конце программы вызывается функция getch для ожидания нажатия клавиши перед закрытием программы.
  10. Возвращаемое значение функции main равно 0, что означает успешное завершение программы.

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


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

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

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

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

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

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