Помощь - Поиск - Пользователи - Календарь
Полная версия: Типы переменных
Форум «Всё о Паскале» > 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, будут проблемы с индексами. Использование собственного типа в данной ситуации совершенно оправдано, и не нужно его ни на что заменять. Учись использовать все средства, которые предоставляет язык.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.