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