Перевести код с 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);
                }
        }
}

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

  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