Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
1

Обращение к массиву не через переменную, а через константу. Возможно ли?

05.09.2014, 09:26. Показов 1866. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Интересно не ради практики, но принципа. Матрица объявляeтся как пользовательский тип.

type
matrix : array [0..5] of byte;
var
a : matrix;

Если же захотеть представить массив константой, то сложность возникнет от того, что в константе не указан тип.
Но все же хотельсь бы нечто такое осуществить :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
program matrix_const;
const
matrix = [0..4, 0..9];
var
i, j : integer;
label a, b;
begin
     i := 0;
     a:
     if i <= 9 then
     begin
          j := 0;
          b:
          if j <= 4 then
          begin
               write(matrix[2,3]:4);
               inc(j);
               goto a;
          end;
          writeln;
          inc(i);
          goto b;
     end;
readln;
end.
Незаданные но объявленные элементы массива равны 0.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2014, 09:26
Ответы с готовыми решениями:

Как сделать обращение к массиву везде через указатели?
Как сделать обращение к массиву везде через указатели? #include &lt;iostream&gt; using namespace std; ...

Обращение к листу через переменную
День добрый, форумчане! Столкнулся вот с какой проблемой... При задании переменной через...

Обращение к потомкам элемента через переменную this
Используя переменную this можно обращаться к потомкам по индексу - порядку следования. Например: ...

Обращение к ячейке Excel через переменную
Доброго времени суток. У меня возник вопрос. st:= Excel.range ; У меня, например, в переменной...

12
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
05.09.2014, 09:50 2
Цитата Сообщение от Albaz Посмотреть сообщение
Pascal
1
2
type
matrix : array [0..5] of byte;
неверно. типы объявляются через знак равно, через двоеточие объявляются переменные.

Цитата Сообщение от Albaz Посмотреть сообщение
Если же захотеть представить массив константой, то сложность возникнет от того, что в константе не указан тип.
кто мешает Вам задать типизированную константу?
TurboPascal так умеет.

смотрите:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
type
  matrix = array [0..5] of byte;
 
const
  a : matrix = (10,11,12,13,14,15);
 
var i : integer;
begin
  for i:= low(a) to high(a) do
    Write(a[i],' ');
  WriteLn;
  Readln
end.
0
Почетный модератор
64305 / 47600 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.09.2014, 10:00 3
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Пример программы с константой-матрицей.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const
matrix:array[0..4, 0..9] of integer = ((1,2,3,4,5,6,7,8,9,10),
                                       (1,2,3,4,5,6,7,8,9,10),
                                       (1,2,3,4,5,6,7,8,9,10),
                                       (1,2,3,4,5,6,7,8,9,10),
                                       (1,2,3,4,5,6,7,8,9,10));
var i, j : integer;
begin
for i := 0 to 4 do
 begin
  for j:= 0 to 9 do
  write(matrix[i,j]:4);
  writeln
 end;
readln;
end.
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
05.09.2014, 18:26  [ТС] 4
Прекрасно!!!
Но пожалуйста, растолкуйте если возможно
Pascal
1
2
const
  a : matrix = (10,11,12,13,14,15);
Сам автор строк говорил, что пользовательские типы как и константы объявляются знаком "=". Тут же мы видем сочетание ":" и "=". Как бы это истолковать?
Ведь код
Pascal
1
2
const
matrix:array[0..4, 0..9] of integer = ((1,2,3,4,5,6,7,8,9,10),
совмещает и типизацию - "of integer".
Напрашивается вопрос - будет ли логичным писать нечто:
const
nomer integer = 10;
или
а:nomer integer = 10;
Т.е. хотя константы в Паскале автотипизированы, но ведь в Питоне переменные так же автотипизированы. Если абстрактно допустить принудительную типизацию констант и в Паскале, то как бы ей следовало выглядеть?
Это я спрашиваю из-за наличия ":" и "=".
Все что возможно, хочется видеть закономерным и разумным.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7795 / 4618 / 2830
Регистрация: 22.11.2013
Сообщений: 13,113
Записей в блоге: 1
05.09.2014, 18:37 5
Albaz,
помимо обычных констант вида
Pascal
1
2
const
  имя_константы = значение;
в Turbo Pascal были введены типизированные константы (которые на самом деле являются заранее инициализированными переменными), которые объявляются так:
Pascal
1
2
const
  имя_константы: тип = значение;
При задании значений массивов значения перечисляются через "," и каждый уровень заключается в скобки, записи задаются с указанием имени полей и значения полей через ":", последние элементы записи можно опускать (для них используется инициализация по умолчанию -- числа в 0, строки в '', указатели в nil).
Значения задаются типизированным константам один раз в начале программы. По ходу выполнения программы значения можно менять.

В Free Pascal были добавлены инициализируемые переменные
Pascal
1
2
var
  переменная: тип = значение;
Отличие от типизированных констант -- значение задаётся каждый раз при входе в блок, то есть это эквивалент
Pascal
1
2
3
4
var
  переменная: тип;
begin
  переменная := значение;
1
Почетный модератор
64305 / 47600 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.09.2014, 18:46 6
Цитата Сообщение от Sergio Leone Посмотреть сообщение
типы объявляются через знак равно, через двоеточие объявляются переменные.
Ничего про константы не говорится, а тип я пользовательский не задавал.
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
05.09.2014, 19:00  [ТС] 7
Цитата Сообщение от Puporev Посмотреть сообщение
а тип я пользовательский не задавал.
Хорошо.
В таком случае, отступая малость в сторону, скажите какая разница между
Pascal
1
2
type
matrix = array [0..4, 0..9] of integer;
и
Pascal
1
2
var
matrix : array [0..4, 0..9] of integer;
0
Почетный модератор
64305 / 47600 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.09.2014, 19:05 8
В первом случае matrix это тип, а во втором переменная, кстати в Турбо Паскале в разделе var так нельзя писать.

Добавлено через 1 минуту
Можно так
Pascal
1
2
3
type
matrix = array [0..4, 0..9] of integer;
var a:matrix;
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
06.09.2014, 08:08  [ТС] 9
Цитата Сообщение от Puporev Посмотреть сообщение
в Турбо Паскале в разделе var так нельзя писать.
В смысле "нельзя"?
Написать то компилятор позволит ))
Pascal
1
2
var
matrix : array [0..4, 0..9] of integer;
Просто нельзя будет к массиву обращаться как к типу :
Pascal
1
2
3
var
matrix : array [0..4, 0..9] of integer;
matrix1 : array [0..5] of matrix;
==error==

Но если
Pascal
1
2
3
4
type
matrix = array [0..4, 0..9] of integer;
var
matrix1 :  array [0..5] of matrix;
то сложностей не будет.
Потому не понял, что хотели сказать.
0
Почетный модератор
64305 / 47600 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.09.2014, 08:12 10
Сам не понял, засыпал уже, почему--то показалось что написано
Pascal
1
var  matrix:array [0..4, 0..9] of integer = (10,11,12,13,14,15);
Видимо уже приснилось, извините.
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
06.09.2014, 09:16  [ТС] 11


error-ы в наших головах явление традиционное))

Добавлено через 2 минуты
Цитата Сообщение от bormant Посмотреть сообщение
были введены типизированные константы
Нда, компиль принимает такой расклад
Pascal
1
2
3
4
5
6
7
8
9
program constanta;
const a = 'Konstanta';
b = a;
c : integer = 3;
d : string = 'Konstanta2';
begin
writeln(b, c, d);
readln;
end.
Добавлено через 11 минут
Но вот
Цитата Сообщение от bormant Посмотреть сообщение
инициализируемые переменные
почему то не того...
Pascal
1
2
var
e : integer = 5;
0
Почетный модератор
64305 / 47600 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.09.2014, 09:50 12
В Турбо Паскале это не пойдет, нужно либо константой, либо присваиванием.

Добавлено через 3 минуты
А написано было про Фрее Паскаль
Цитата Сообщение от bormant Посмотреть сообщение
В Free Pascal были добавлены инициализируемые переменные
var
* переменная: тип = значение;
0
-30 / 8 / 1
Регистрация: 31.05.2013
Сообщений: 485
06.09.2014, 19:54  [ТС] 13
Цитата Сообщение от bormant Посмотреть сообщение
В Free Pascal были добавлены
нда... невнимателен. Каюсь )
0
06.09.2014, 19:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2014, 19:54
Помогаю со студенческими работами здесь

Обращение к ресурсу через текстовую переменную
День добрый. Можно ли обратиться к следующему ресурсыthis.button1.BackgroundImage =...

Обращение к элементу формы через переменную
Здравствуйте, волнует такой вопрос, допустим есть переменная типа String, которая хранит название...

Обращение к полям record через переменную
Доброго времени суток. Есть запись типа record type PElemRec = ^TElemRec; TElemRec...

Обращение к членам класса через переменную
Приветствую, Не знаю как объяснить, в PHP это делается так: $function_name = 'my_func';...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru