Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Непонятка с string (и что такое char?)

Автор: DIMMUA 24.04.2007 3:05

Добрый день.

1. Обясните что такое string и что такое char?
Нет, только не надо говорить, что string - это строчная переменная, а char - это текст, это мне сказал препод в универе (к сожалению больше я ничего из него выдавил). Меня инетересует, чем на практике отличаются string от char ? Ну может, допустим char можно как-то сортировать, а string нет и т.д.....
2. Что такое packed array? Ну вот написано b=packed array[1..30] of char ? Что такое array (массив я знаю), что он char (символьный) я догадался, но вот "packed array" - такого я не знаю.
3. Далее я приведу кусочек из моего текста программы:

Program lab;
uses crt;
var s,d: string;
z,k,c,i,j: integer;
Begin
clrscr;
Write(' Vvedite stroky = ');
Readln(s);
c:=length(s);
for i:=1 to c do
if s[i]=' ' then
k:=i;
for i:=k+1 to c-1 do
Begin
j:=j+1;
d[j]:=s[i];
end;
Write('Poslednee slovo = ');
for i:=1 to j do
Write(d[i]);
writeln;
writeln('d = ',d);
writeln('Dlina d = ',length(d));
readkey;
end.


В общем условие: дана строка s, в неё входят слова, между словами не меньше одного проблема, после последнего слова точка(!). Нужно найти это последнее слово и записать в переменную d.

Впринципе у меня все работет, но вот буквы из в приходятся "выуживать" (for i:=1 to j do), т.е. если написать просто writeln(d) получается фигня. Далее если написать length(d) - длина d, то паскаль выводит значение 0(!), хотя я туда заносил буквы. Я кончено пробовал типа d[0]:=5 - и оно тогда при writeln(d) выводил только пять букв, но дело в том, что я же не знаю сколько букв в этом слове. Конечно, значение переменной j и есть кол-во букв, на вот d[0]:=j паскалю не нравится. Вот как сделать так, что я мог нормально знать длину строки d.

И еще (может идею подкинете smile.gif ). После того как я нашел последнее слово, я должен просмотреть всю строку и вывести только те слова, которые отличаются от последнего слова - вот как это сделать я даже не имею понятия.

P.S. Прикрепил скан с методички, ну что бы вы посмотрели, что полезного в ней много не найдешь. И свой текст программы.


Эскизы прикрепленных изображений
Прикрепленное изображение

Прикрепленные файлы
Прикрепленный файл  DIMM.PAS ( 383 байт ) Кол-во скачиваний: 265

Автор: volvo 24.04.2007 3:26

Цитата
не надо говорить, что string - это строчная переменная, а char - это текст
blink.gif А?... Хм...

Char - какой же это текст? Это символ, в смысле - ОДИН символ... Значит, так: про использование packed array можешь забыть - это стандартный паскаль, в нем не было String-ов, поэтому пользовались упакованными массивами символов...

Теперь, почему тебе
Цитата
приходятся "выуживать"
содержимое D... Все просто - ты же работаешь со строкой "вручную" - но при этом совсем не заботишься об установке длины строки, хранящейся в нулевом символе... "А ларчик просто открывается" (С) - достаточно было просто пройти от конца строки к началу, пока не встретишь либо САМОЕ начало строки, либо пробел:
i := length(s) - 1;
d := ''; { <--- не забывай задавать начальные значения }
while (i > 1) and (s[i] <> ' ') do begin
d := s[i] + d; { <--- "прибавляешь" очередной символ к НАЧАЛУ слова }
dec(i); { <--- и переходишь к предыдущему символу }
end;

{ теперь можно печатать writeln(d), Паскаль сделает все как положено }


По поводу
Цитата
После того как я нашел последнее слово, я должен просмотреть всю строку и вывести только те слова, которые отличаются от последнего слова
- в разделе "Задачи" есть прикрепленная тема - "Разбиение строки на слова", посмотри там способ klem4, он самый простой, но эффективный...

Автор: DIMMUA 24.04.2007 12:34

Цитата(volvo @ 23.04.2007 23:26) *

в разделе "Задачи" есть прикрепленная тема - "Разбиение строки на слова", посмотри там способ klem4, он масый простой, но эффективный...


Спасибо, посмотрел... Но буду переделывать способ klem4 т.к. мы впринципе TWords, text, words - ничего подобного не учили sad.gif. Вообще мы по программе учили: три вида цикла, массивы (чуть-чуть), сортировка методом пузьрька. И впринципе из основного все smile.gif. Типы переменных: real, integer, string.

Но большое спасибо, за то что рассказал про "d", "packed array" а тоя уже воообще чувствовал себя идиотом smile.gif. Про "char" тоже спасибо.