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