• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, написать программку на Паскале

павля

незнайка:)
Почётный участник
Регистрация
29 Янв 2011
Сообщения
124
Реакции
3
Баллы
0
Помогите, пожалуйста, написать программку на Паскале

условие таково: дана строка символов S. вывести слова по возрастанию...:tehnari_ru_078:

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

заранее благодарна...:tehnari_ru_078:
 
  • Like
Реакции: Maga
нууу...вот в строке несколько слов(символов) через пробел...надо по видимому посчитать количество символов(букв) в каждом слове, и сравнивая расположить по возрастанию(увеличению символов)...
 
Вот:
Код:
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. Методом "пузырька" массив упорядочивается по длинам слов.

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

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

а не могли бы вы описать все переменные использующиеся в этой программе:tehnari_ru_117:
Так а там их всего ничего. S - исходная строка, S1 - вспомогательная строковая переменная, используемая в цикле упорядочения массива, S2, i1, i2 описаны выше в комментариях к программе, остальные (i, j, k) - счетчики да переменные циклов.
 
ойой...не то:tehnari_ru_182:...извините..."ОПЕРАТОРЫ" если можно:tehnari_ru_117:...хотя спасибочки и за них огромненькое
 
ойой...не то:tehnari_ru_182:...извините..."ОПЕРАТОРЫ" если можно:tehnari_ru_117:...хотя спасибочки и за них огромненькое
Из операторов интерес представляет только Copy. Это функция, значением которой является новая строка, представляющая собой копию фрагмента исходной строки, начинающегося с номера (напр.) i1 и имеющего длину в n символов. Таким образом, если S - исходная строка, R - содержащийся в ней фрагмент, то справедливо R:=Copy(S,i1,n);
Остальные использованные операторы - самые ходовые, о них можно прочитать в абсолютно любом руководстве по Паскалю.
 
спасибочьки большое...безмерно благодарна вам за всё:tehnari_ru_078:....вы мне очень помогли....СПАСИБО:tehnari_ru_088:
 
Назад
Сверху