Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, пожалуйста, написать программку на Паскале (http://www.tehnari.ru/f41/t47113/)

павля 07.02.2011 20:39

Помогите, пожалуйста, написать программку на Паскале
 
условие таково: дана строка символов S. вывести слова по возрастанию...:tehnari_ru_078:

если можно с пояснениями:tehnari_ru_117:

заранее благодарна...:tehnari_ru_078:

Vladimir_S 07.02.2011 20:48

Цитата:

Сообщение от павля (Сообщение 461580)
условие таково: дана строка символов S. вывести слова по возрастанию...

По возрастанию чего? И о каких словах речь? Строку, что ли, на слова разбить, или как?

павля 07.02.2011 20:56

нууу...вот в строке несколько слов(символов) через пробел...надо по видимому посчитать количество символов(букв) в каждом слове, и сравнивая расположить по возрастанию(увеличению символов)...

Vladimir_S 07.02.2011 21:26

Вот:
Код:

VAR
 S,S1:String;
 S2:Array[1..130] of String;
 i,i1,i2,j,k:Byte;
BEGIN
 WriteLn('Enter the string:');
 ReadLn(S);
 WriteLn;
 i:=0;
 k:=0;
 Repeat
  Repeat
  Inc(i);
  Until S[i]<>' ';
  i1:=i;
  Repeat
  Inc(i);
  Until (S[i]=' ') or (i=Length(S));
  If S[i]=' ' then i2:=i else i2:=i+1;
  Inc(k);
  S2[k]:=Copy(S,i1,(i2-i1));
 Until i=Length(S);
 WriteLn;
 WriteLn;
 For i:=1 to k do
  For j:=1 to k-i do
  If Length(S2[j])>Length(S2[j+1]) then
    begin
    S1:=S2[j+1];
    S2[j+1]:=S2[j];
    S2[j]:=S1;
    end;
 For i:=1 to k do
  Write(S2[i]+' ');
 WriteLn;
 ReadLn;
END.

Пояснения:
1. Вводится строка (которая даже может начинаться с пробелов).
2. Организуется цикл последовательного перебора символов строки.
3. Последовательно вычленяются слова. Сперва ищется номер символа, не являющегося пробелом (i1), затем перебор продолжается до первого пробела или конца строки. Номер такого символа есть i2. Таким образом, определяются номера символов-границ очередного слова.
4. Очередное найденное слово вычленяется командой Copy и заносится в массив S2.
5. Методом "пузырька" массив упорядочивается по длинам слов.

Устроит?

павля 07.02.2011 22:17

оо...да да да....конечно...спасибочки огромное вам:tehnari_ru_078:

а не могли бы вы описать все переменные использующиеся в этой программе:tehnari_ru_117:

Vladimir_S 07.02.2011 22:22

Цитата:

Сообщение от павля (Сообщение 461660)
оо...да да да....конечно...спасибочки огромное вам:tehnari_ru_078:

а не могли бы вы описать все переменные использующиеся в этой программе:tehnari_ru_117:

Так а там их всего ничего. S - исходная строка, S1 - вспомогательная строковая переменная, используемая в цикле упорядочения массива, S2, i1, i2 описаны выше в комментариях к программе, остальные (i, j, k) - счетчики да переменные циклов.

павля 07.02.2011 22:32

ойой...не то:tehnari_ru_182:...извините..."ОПЕРАТОРЫ" если можно:tehnari_ru_117:...хотя спасибочки и за них огромненькое

Vladimir_S 07.02.2011 22:43

Цитата:

Сообщение от павля (Сообщение 461680)
ойой...не то:tehnari_ru_182:...извините..."ОПЕРАТОРЫ" если можно:tehnari_ru_117:...хотя спасибочки и за них огромненькое

Из операторов интерес представляет только Copy. Это функция, значением которой является новая строка, представляющая собой копию фрагмента исходной строки, начинающегося с номера (напр.) i1 и имеющего длину в n символов. Таким образом, если S - исходная строка, R - содержащийся в ней фрагмент, то справедливо R:=Copy(S,i1,n);
Остальные использованные операторы - самые ходовые, о них можно прочитать в абсолютно любом руководстве по Паскалю.

павля 07.02.2011 23:03

спасибочьки большое...безмерно благодарна вам за всё:tehnari_ru_078:....вы мне очень помогли....СПАСИБО:tehnari_ru_088:


Часовой пояс GMT +4, время: 06:12.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.