Перевести Код Из Паскаля В C

Тема в разделе "C/C++/C#", создана пользователем Strongmamba, 10 мар 2012.

  1. Strongmamba

    Strongmamba Гость

    Помогите пожалуйста. Отсортировать по возрастанию элементы стоящие по периметру матрицы,начиная с элемента A(n,1) по часовой стрелке.Среди элементов. надо перевести этот чудо-код в С.
    uses crt;
    const nmax=20;
    var a:array[1..nmax,1..nmax] of integer;
    n,m,i,j:byte;
    kol,num:integer;
    procedure vvod;
    var i,j:byte;
    begin
    repeat
    write('Количество строк до ',nmax,' n=');
    readln(n);
    until n in [1..nmax];
    repeat
    write('Количество столбцов до ',nmax,' m=');
    readln(m);
    until m in [1..nmax];
    writeln('Исходная матрица:');
    for i:=1 to n do
    begin
    for j:=1 to m do
    begin
    a[i,j]:=random(50)+1;
    write(a[i,j]:4);
    end;
    writeln;
    end;
    writeln;
    end;
    {поиск номеров элементов для сравнения и обмена}
    procedure n_elem(var x,y:byte;num:integer);
    var i,np,xp,xl,yv,yn:byte;
    j:integer;
    procedure next_elem;{маршрут поиска}
    begin
    if (j=kol) then exit;{прошли все}
    case np of{направления 1-вверх, 2-вправо, 3-вниз, 4-влево}
    1: begin y:=y-1; if y=yv then np:=2; end;
    2: begin x:=x+1; if x=xp then np:=3; end;
    3: begin y:=y+1; if y=yn then np:=4; end;
    4: begin x:=x-1; if x=xl then np:=5; end;
    end;
    j:=j+1;{считаем шаги}
    if np=5 then exit;{вернулись в левый нижний угол}
    end;
    begin
    x:=1;y:=n+1;{начало пути ниже матрицы в первом столбце}
    np:=1;{первое направление}
    xl:=1;xp:=m;yv:=1;yn:=n;{обозначим края}
    j:=0;{обнулим счетчик}
    for i:=1 to num do next_elem;{начинаем поиск}
    end;
    {чтение элемента}
    procedure out_el(num:integer;var out_el:integer);
    var x,y:byte;
    begin
    n_elem(x,y,num);
    out_el:=a[y,x];
    end;
    {вставка элемента}
    procedure in_el(num:integer;k:integer);
    var x,y:byte;
    begin
    n_elem(x,y,num);
    a[y,x]:=k;
    end;
    {Собственно сортировка линейным обменом}
    procedure sort;
    var i,j:byte;
    k,u:integer;
    begin
    for i:=1 to kol-1 do{идем по маршруту}
    for j:=i+1 to kol do{смотрим впереди}
    begin
    out_el(i,k);{читаем первый}
    out_el(j,u);{второй}
    if k>u then{если первый больше}
    begin
    in_el(i,u);{второй на место первого}
    in_el(j,k);{первый на место второго}
    end;
    end;
    end;

    procedure vyvod;
    begin
    for i:=1 to n do
    begin
    for j:=1 to m do
    begin
    write(a[i,j]:4);
    end;
    writeln;
    end;
    end;
    {Это поиск макс и мин внутри}
    procedure max_min;
    var i,j,imn,jmn,imx,jmx:byte;
    mn,mx:integer;
    begin
    mn:=a[2,2];imn:=2;jmn:=2;
    mx:=a[2,2];imx:=2;jmx:=2;
    for i:=2 to n-1 do
    for j:=2 to m-1 do
    if a[i,j]<mn then
    begin
    mn:=a[i,j];
    imn:=i;
    jmn:=j;
    end
    else if a[i,j]>mx then
    begin
    mx:=a[i,j];
    imx:=i;
    jmx:=j;
    end;
    writeln('Минимальный элемент внутри периметра a[',imn,',',jmn,']=',mn);
    writeln('Максимальный элемент внутри периметра a[',imx,',',jmx,']=',mx);
    end;

    begin
    clrscr;
    randomize;
    vvod;
    kol:=2*(n+m-2);{длина маршрута по периметру}
    writeln('Сортировка: ');
    sort;
    vyvod;
    max_min;
    readln;
    end.
     
  2. Истребитель

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    Ну это же совсем не трудно

    0. uses превращается в include, если не знаешь что инклюдить посмотри на какую процедуру ругается компилятор и на www.cplusplus.com посмотри какой файл нужно заинклюдить, затем добавь #include <имяфайла>

    1. Для операций сравнения = превращается в ==, <> превращается в !=, условия для if обязательно должны быть в скобках
    2. Все функции/процедуры без параметров должны иметь пустые скобки на конце
    3. then отсутствует
    4. begin заменяется на { а end заменяется на } и после закрывающей скобки точка с запятой не требуется
    5. writeln и readln нет, read = scanf, write = printf, синтаксис похожий (чтобы сделать вывод пустой строки выводишь \r\n)

    if a = b then begin writeln; exit; end;
    станет
    if (a==B) { printf("\r\n"); exit(); }

    6. var не нужен, переменные объявляются чуть иначе, первый элемент массива нумеруется 0, а не 1:

    var i:integer;
    станет
    int i;

    var a:array[1..nmax,1..nmax] of integer;
    станет
    int a[nmax,nmax];

    7. Присваивание записывается просто = а не :=

    8. Процедуры и функции объявляются одинаково, процедура - это функция возвращающая void (пустоту), не требуется отдельный блок var

    procedure vvod;
    var i:int;
    begin
    readln;
    end;

    станет

    void vvod()
    {
    int i;
    scanf();
    }

    9. repeat и until превращаются в do и while
    10. вместо a:=a+1 можно писать a++ и аналогично для минуса.
    11. смысл слов unti и while противоположный, т.е. в паскале цикл выполняется пока условие ложь, а в с пока истина

    repeat
    a:=a + 1;
    until a = 10;

    станет

    do{
    a++;
    } while (a!=10)

    12. По case синтаксис похожий, просто почитай синтаксис помошник или посмотри на www.cplusplus.com

    13. Тело главной программы находится внутри функции int main()

    begin
    vvod;
    ...
    end

    станет

    int main(){
    vvod();
    ..
    }

    После того как переведешь весь код, просто запускай компилятор и смотри какие ошибки остались, читаешь справку, если какая-то функция встроенная ругается, что такой нет то гуглишь "аналог <имя_функции/процедуры> в C" и смотришь на что заменить.
     
Загрузка...
Похожие Темы - Перевести Код Из
  1. Dimkawshm
    Ответов:
    3
    Просмотров:
    1.243
  2. marik22222
    Ответов:
    1
    Просмотров:
    1.205
  3. ClockRu
    Ответов:
    0
    Просмотров:
    1.255
  4. GoldenYear
    Ответов:
    0
    Просмотров:
    1.167
  5. Ластик
    Ответов:
    3
    Просмотров:
    1.483

Поделиться этой страницей