Перевести из паскаля в СИ - C (СИ) (74138)
Формулировка задачи:
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.Решение задачи: «Перевести из паскаля в СИ»
textual
Листинг программы
#include <stdio.h>
#define N 5050
typedef int value;
value arr[N];
int columns;
int
newindex(int i, int j)
{
return i * columns + j;
}
void
puttab(int i, int j, value v)
{
arr[newindex(i, j)] = v;
}
value
gettab(int i, int j)
{
return arr[newindex(i, j)];
}
int
main(void)
{
int i, j, len;
value v;
columns = 10;
v = 0;
for (i = 0; i < columns; i++)
for (j = 0; j < columns; j++)
puttab(i, j, ++v);
printf("==== Table ====\n");
for (i = 0; i < columns; i++) {
for (j = 0; j < columns; j++)
printf("%3d ", gettab(i, j));
printf("\n");
}
len = columns * columns;
printf("==== Array ====\n");
for (i = 0; i < len; i++)
printf("%4d ", arr[i]);
printf("\n\n");
return 0;
}
Объяснение кода листинга программы
- Включаем заголовочный файл
для использования функций ввода-вывода. - Объявляем константу N, которая равна 5050.
- Создаем тип данных value и массив arr типа value размером N.
- Объявляем переменную columns, которая будет использоваться для хранения количества столбцов в таблице.
- Определяем функцию newindex, которая принимает два аргумента типа int (i и j) и возвращает индекс элемента массива, который находится в строке i и столбце j.
- Определяем функцию puttab, которая принимает три аргумента типа int (i, j и v) и записывает значение v в элемент массива с индексом, вычисленным функцией newindex.
- Определяем функцию gettab, которая принимает два аргумента типа int (i и j) и возвращает значение элемента массива с соответствующим индексом.
- В функции main() объявляем три переменные типа int (i, j и len) и одну переменную типа value (v).
- Инициализируем переменную columns значением 10.
- Инициализируем переменную v значением 0.
- Используем два вложенных цикла for для заполнения массива arr значениями от 1 до 100.
- Выводим таблицу на экран с помощью вложенных циклов for и функций puttab и gettab.
- Выводим значения массива arr на экран с помощью цикла for и функции printf.
- Выводим символ новой строки \n\n` для перехода на новую строку.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.