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