Перевести код с Pascal - C (СИ) (76842)
Формулировка задачи:
Листинг программы
- var N:integer;
- a:array[0..1000] of integer;
- function Min(m1,m2:integer):integer;
- begin
- if(m1>m2) then Min:=m2
- else Min:=m1;
- end;
- procedure output(count:integer);
- var i:integer;
- begin
- write(a[1]);
- for i:=2 to count do
- write('+',a[i]);
- writeln;
- end;
- procedure p(k,summ:integer);
- var i:integer;
- begin
- if(summ=N) and (k>2) then output(k-1);
- if summ<N then
- begin
- for i:=1 to Min(N-summ,a[k-1]) do
- begin
- a[k]:=i;
- p(k+1,summ+i);
- end;
- end;
- end;
- begin
- a[0]:=MaxInt;
- readln(N);
- p(1,0);
- readln;
- end.
Решение задачи: «Перевести код с Pascal»
textual
Листинг программы
- #include <stdio.h>
- // библиотека ввода/вывода (scanf/printf)
- #include <conio.h>
- // включает функцию getch();
- #define Min( a, b ) ( ((a) < (b)) ? (a) : (b) )
- // задает функцию Min(a,b) - если А меньше Б, возвращает А, иначе возвращает Б
- #define MaxInt 32767;
- // в паскале есть эта константа, тут пришлось задавать так
- int N,a[1000]; /* n:integer; a:array[0..1000] of integer; */
- void output(int count); /* задание прототипа процедуры output(count:integer); */
- void p(int k,int summ); /* задание прототипа процедуры p(k,summ:integer); */
- int main(int argc, char* argv[]) /* основная программа */
- { /* begin */
- a[0]=MaxInt; /* a[0]:=MaxInt; */
- scanf("%i",&N); /* readln(N); */
- p(1,0);
- getch(); /* ждёт нажатие любой клавиши перед закрытием программы */
- return 0;
- }
- void output(int count) /* procedure output(count:integer); */
- {
- int i; /* i:integer; */
- printf("%i",a[1]); /* write(a[1]); */
- for(i=2;i<=count;i++) /* for i=2 to count do*/
- printf("+%i",a[i]); /* write(a[i]); */
- printf("\n"); /* writeln(); */
- }
- void p(int k,int summ) /* procedure p(k,summ:integer) */
- {
- int i;
- if ((summ==N)&&(k>2)) output(k-1); /* if (summ=N) and (k>2) then output(k-1); */
- if (summ<N){
- for(i=1;i<=Min(N-summ,a[k-1]);i++){ /* for i=1 to Min(N-summ,a[k-1]) do begin */
- a[k]=i;
- p(k+1,summ+i);
- }
- }
- }
Объяснение кода листинга программы
- Включаются необходимые библиотеки для ввода/вывода и функции Min и MaxInt.
- Объявляются переменные N и массив a размером 1000.
- Определяются прототипы функций output и p.
- В функции main инициализируется первый элемент массива a значением MaxInt и считывается значение N с помощью scanf.
- Вызывается функция p(1,0) для начального заполнения массива.
- В функции output выводится значение первого элемента массива a и последовательно добавляются значения остальных элементов до указанного счётчика.
- В функции p проверяется условие: если сумма текущих элементов равна N и индекс больше 2, то вызывается функция output для предыдущего элемента.
- Если сумма текущих элементов меньше N, то в цикле добавляются значения от 1 до минимального значения (N-summ) и вызывается функция p для следующего элемента.
- В конце программы вызывается функция getch для ожидания нажатия клавиши перед закрытием программы.
- Возвращаемое значение функции main равно 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д