Перевод кода с Pascal на СИ - C (СИ)

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

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

Ребята очень надо перевести программу с Pascal на СИ.
Program LAB2;
Var
    arrp: array[1..5050] of integer;   { Сжатая таблица }
    XM : integer; { Максимальные индексы в таблице }
{==== Функция перевычисления индексов ====}
{ y,x - индексы в 2-мерном массиве. Ф-ция возвращает индекс в 1-мерном массиве }
Function NewIndex(y, x : integer) : integer;
  var i, d: integer;
  begin
  d:=0;
  for i:=1 to y-1 do d:=d+XM-i+1;
  NewIndex:=d+x-y+1;
  end;
 
{==== Функция записи в сжатое представление массива ====}
{ y, x - индексы в 2-мерном массиве, value - записываемое значение. 
  Функция возвращает записываемое значение или 0 - если (x,y) 
  задают индексы элемента, нулевого по определению }
Function PutTab(y,x,value : integer) : integer;
  begin
  if x < y then PutTab:=0
  else begin
    arrp[NewIndex(y,x)]:=value;
    PutTab:=value;
    end;
  end;
 
{==== Функция выборки из сжатого представления массива ====}
{ y, x - индексы в 2-мерном массиве. Функция возвращает выбранное значение }
Function GetTab(y,x: integer) : integer;
  begin
  if x < y then GetTab:=0
  else GetTab:=arrp[NewIndex(y,x)];
  end;
 
{============= Главная программа ===================}
Var
  x, y : integer;  { Индексы в 2-мерном массиве }
  k, h: integer;
  begin
  {===== Проверка формирования массива ======}
  XM:=10;
  { Запись элементов в 1-мерный массив }
  k:=1;
  for y:=1 to XM do
    for x:=1 to XM do begin
      h:=PutTab(y,x,k); k:=k+1;
      end;
  { Распечатка матрицы }
  writeln('===== Матрица =====');
  for y:=1 to XM do begin
    for x:=1 to XM do write(GetTab(y,x):3);
    writeln;
    end;
  { Распечатка внутреннего представления матрицы }
  writeln('===== Матрица (внутр.представление) =====');
  for y:=1 to 55 do write(arrp[y]:4);
  writeln; writeln;
end.

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
 
int arrp[5050];// ÑæГ*ГІГ*Гї ГІГ*áëèöГ* 
int XM; // ГЊГ*ГЄГ±ГЁГ¬Г*ëüГ*ûå ГЁГ*äåêñû Гў ГІГ*áëèöå 
//==== ÔóГ*êöèÿ ïåðåâû÷èñëåГ*ГЁГї ГЁГ*äåêñîâ ====
// y,x - ГЁГ*äåêñû Гў 2-ìåðГ*îì Г¬Г*Г±Г±ГЁГўГҐ. Г”-öèÿ âîçâðГ*Г№Г*ГҐГІ ГЁГ*äåêñ Гў 1-ìåðГ*îì Г¬Г*Г±Г±ГЁГўГҐ
int NewIndex(int y, int x)
{
  int i, d;
  for(d=i=0;i<y-1;i++) d+=XM-i;
  return d+x-y+1;
}
/*=== ÔóГ*êöèÿ Г§Г*ГЇГЁГ±ГЁ Гў Г±Г¦Г*òîå ïðåäñòГ*âëåГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ* ====
  y, x - ГЁГ*äåêñû Гў 2-ìåðГ*îì Г¬Г*Г±Г±ГЁГўГҐ, value - Г§Г*ïèñûâГ*åìîå Г§Г*Г*Г·ГҐГ*ГЁГҐ. 
  ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ Г§Г*ïèñûâГ*åìîå Г§Г*Г*Г·ГҐГ*ГЁГҐ èëè 0 - åñëè (x,y) 
  Г§Г*Г¤Г*ГѕГІ ГЁГ*äåêñû ýëåìåГ*ГІГ*, Г*óëåâîãî ГЇГ® îïðåäåëåГ*ГЁГѕ */
int PutTab(int y,int x,int value)
{
  if(x < y) return 0;
  arrp[NewIndex(y,x)]=value;
  return value;
}
//==== ÔóГ*êöèÿ âûáîðêè ГЁГ§ Г±Г¦Г*òîãî ïðåäñòГ*âëåГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ* ====
// y, x - ГЁГ*äåêñû Гў 2-ìåðГ*îì Г¬Г*Г±Г±ГЁГўГҐ. ÔóГ*êöèÿ âîçâðГ*Г№Г*ГҐГІ âûáðГ*Г*Г*îå Г§Г*Г*Г·ГҐГ*ГЁГҐ 
int GetTab(int y,int x)
{
  return (x < y)?0:arrp[NewIndex(y,x)];
}
//============= ГѓГ«Г*ГўГ*Г*Гї ïðîãðГ*ììГ* ===================}
int main(int argc, char *argv[])
{
  int x, y;// Г€Г*äåêñû Гў 2-ìåðГ*îì Г¬Г*Г±Г±ГЁГўГҐ 
  int k;
  XM=10;
  setlocale(LC_ALL,"Russian_russia.1251");
  // Г‡Г*ГЇГЁГ±Гј ýëåìåГ*òîâ Гў 1-ìåðГ*ûé Г¬Г*Г±Г±ГЁГў 
  for(k=y=0; y<XM; y++)
    for(x=0; x<XM; x++, k++) PutTab(y,x,k);
  // ГђГ*Г±ГЇГҐГ·Г*ГІГЄГ* Г¬Г*òðèöû 
  printf("===== ГЊГ*òðèöГ* =====\n");
  for(y=0; y<XM; y++, printf("\n"))
    for(x=0; x<XM; x++) printf("%3d",GetTab(y,x));
  // ГђГ*Г±ГЇГҐГ·Г*ГІГЄГ* ГўГ*óòðåГ*Г*ГҐГЈГ® ïðåäñòГ*âëåГ*ГЁГї Г¬Г*òðèöû 
  printf("===== ГЊГ*òðèöГ* (ГўГ*ГіГІГ°.ïðåäñòГ*âëåГ*ГЁГҐ) =====\n");
  for(y=0; y<55; y++) printf("%4d",arrp[y]);
  printf("\n\n");
  getch();
  return 0;
}

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


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

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

9   голосов , оценка 4.444 из 5