IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Типы переменных, Незнакомые типы переменных в Pascal
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Доброго времения суток!
Изучаю массивы и столкнулся с такой задачей:

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

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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 113
Пол: Мужской
Реальное имя: Надир

Репутация: -  6  +


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 );


Сообщение отредактировано: Freedom -


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Можно заменить
Нельзя. Индексация собьется, и ответ будет неправильный.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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, будут проблемы с индексами. Использование собственного типа в данной ситуации совершенно оправдано, и не нужно его ни на что заменять. Учись использовать все средства, которые предоставляет язык.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 15:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name