Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 14:42   #1
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
Вопрос Паскаль. Динамические переменные

написать программу для решения задачи (рассмотреть любой один из четырех случаев), матрицы следует разместить в "куче" при выполнении следующих условий:
а) число строк и число столбцов - константы;
б) число строк - константа, а число столбцов - исходное данное;
c) число строк - исходное данное, число столбцов - константа;
д) число строк и число столбцов - исходные данные.
Ввод, вывод и обработку матриц описать отдельными подпрограммами
Дана матрица. Определить k – количество "особых" элементов данной матрицы, считая элемент "особым", если в строке слева от него находятся меньшие элементы, а справа – бóльшие

я написал код для работы с обычной матрицей( плохо знаком я с динамическими структурами) . Может кто-нибудь поможет исправить мой код. Буду очень признателен

Код:
const m = 5; n = 4; type t_row = array[1..n] of byte; t_matr = array[1..m] of t_row; procedure read_matr(var a: t_matr); var i, j: byte; begin for i := 1 to m do for j := 1 to n do read(a[i][j]); end; function test_el(const a: t_row; x: byte): boolean; var i, j: byte; b: boolean; begin i := 1; while (i < x ) and (a[i] < a[x]) do i := i + 1; if i = x then begin repeat i := i + 1; until (i > n) or (a[i] <= a[x]); test_el := i > n; end; end; var a: t_matr; i, j, k, x: byte; begin read_matr(a); k := 0; for i := 1 to m do for j := 2 to n - 1 do if test_el(a[i], j) then k := k + 1; write('k-vo=', k); readln; readln end.
Pepsik вне форума Ответить с цитированием
Старый 14.07.2011, 21:50   #2
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

неужели никто не знает(((
Pepsik вне форума Ответить с цитированием
Старый 14.07.2011, 22:45   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

В старом добром Паскале динамических массивов нет, поэтому надо использовать, например, списки или чудить с выделенной памятью.
Код:
{$R-}//отключаем ошибки при выходе за границы
type
  PArray = ^TArray;
  TArray = array[0..0, 0..0] of byte;
var
  a: PArray;
  m, n: byte;
begin
  m := 7;
  n := 9;
  GetMem(a, m * n);//для не байтовых типов m * n * sizeof(тип)
  //работаем с массивом a^
  FreeMem(a, m * n)
end.

Последний раз редактировалось eoln; 14.07.2011 в 23:05. Причина: двумерный массив
eoln вне форума Ответить с цитированием
Старый 14.07.2011, 23:40   #4
Pepsik
Пользователь
 
Регистрация: 10.07.2011
Сообщений: 15
По умолчанию

проблема в том, что я не знаю где и в каких случаях ставить ^
Pepsik вне форума Ответить с цитированием
Старый 15.07.2011, 06:33   #5
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Цитата:
проблема в том, что я не знаю где и в каких случаях ставить ^
RTFM =) Гуглите на тему "указатели и связанные списки".
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические переменные If-then-do Помощь студентам 1 30.09.2010 08:48
Динамические переменные Desha Помощь студентам 8 07.09.2009 18:36
Динамические переменные.. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 2 08.06.2009 22:56