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