Помощь - Поиск - Пользователи - Календарь
Полная версия: Типы переменных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Verb
Доброго времения суток!
Изучаю массивы и столкнулся с такой задачей:

Дано предложение составить программу располагающую
слова в порядке убывания длины слов

program z;
uses crt;
type slov = array [1..10] of string;
var p,b : string;
s : slov;
i,j,l : integer;
q : boolean;
procedure maxdl( ii,jj : integer;ss : slov; var ll : integer );
var t:integer;m:string;
begin
m:=ss[ii]; { считает max(t) }
ll:=ii; { l-номер max }
for t:=ii+1 to jj do
if length(m)<length(ss[t]) then
begin
m:=ss[t];
ll:=t;
end;
end;
begin
clrscr;
write('текст p=');readln(p);
j:=1;
for i:=1 to length(p) do
begin
b:=p[i];
if b=' ' then j:=j+1
else s[j]:=s[j]+b;{ склеивание слова и заносим в таб }
end;
b:='';
for i:=1 to j do
begin
maxdl(i,j,s,l); { находим номер мах элм }
b:=s[i]; { меняем местами мах элм: }
s[i]:=s[l];
s[l]:=b;
end;
for i:=1 to j do write(s[i],' ');
readln;
end.


Меня очень заинтерисовал тип slov. Это что именное blink.gif . Какой это тип переменных, какой диапазон и т.д.
На какой другой тип его можно заменить?
Пожалуйста, помогите понять. unsure.gif
Freedom
type slov = array [1..10] of string;
var p,b : string;
s : slov;



slov это пользовательский тип переменных.
type slov = array [1..10] of string; - из этой строки можно узнать что переменные типа slov являются одномерным массивом с 10ю элементами типа string. Можно заменить
s:array [1..10] of string;

procedure maxdl( ii,jj : integer;ss : array of string; var ll : integer );
volvo
Цитата
Можно заменить
Нельзя. Индексация собьется, и ответ будет неправильный.
Lapp
Цитата(Verb @ 9.12.2010 22:29) *
Меня очень заинтерисовал тип slov. Это что именное blink.gif . Какой это тип переменных, какой диапазон и т.д.
На какой другой тип его можно заменить?
Как тебе уже сказали, это тип, введенный самим программистом. В Паскале можно делать свои типы - какие угодно и сколько хочешь. С точки зрения организации доступа к данным этот кусок:
type
slov= array [1..10] of string;
var
s: slov;
- совершенно эквивалентен такому:
var
s: array [1..10] of string;

Отличие состоит только в том, что если ты объявил тип, то ты можешь его использовать в нескольких разных местах для объявления переменных. Все эти переменные будут принадлежать к одному и тому же типу и, следовательно, будут совместимы по присваиванию. Строго говоря, если ты описываешь так:
var
a: array[1..10]of integer;
b: array[1..10]of integer;

- то ты не можешь сделать далее в коде:
  a:=b;
(хотя, возмможно, TurboPascal это и пропустит, но более новый компилятор - нет). Для комприлятора эти два типа разные (хотя по сути они одинаковые). А если ты опишешь этот массив отдельным типом, а потом заведешь переменные этого типа - то можно.

В данном же случае ситуация еще более жесткая, так как в формальных параметрах процедуры вообще нельзя конструировать типы. Поэтому, чтобы передать массив как параметр, нужно описать его тип, и этот тип использовать как при описании самого массива, так и для формального параметра функции, куда он будет передаваться.

То, что сказал Freedom - это особый случай т.н. открытого массива. Использовать это в принципе можно, но, как уже сказал volvo, будут проблемы с индексами. Использование собственного типа в данной ситуации совершенно оправдано, и не нужно его ни на что заменять. Учись использовать все средства, которые предоставляет язык.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.