Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2009, 21:09   #1
Irin@
 
Регистрация: 12.03.2009
Сообщений: 5
По умолчанию Помогите написать комментария к задаче. Pleas!!!

Здравствуйте!!! Не могу понять решение задачи, напишите пожалуйста ход действий(комментария) Пожалуйста
Код:
program prog1;
var
 str1,str2 : string;
 a : array [1..50] of string[15];
 min,buf : string[15];
 i,k,l,j : byte;
begin
  writeln ('Enter string: ');
  readln (str1);
  str2:=str1+' ';
  i:=0;
  k:=1;
  while (str2<>'') and (k<>0) do
  begin
    while str2[1]=' ' do delete (str2,1,1);
    inc(i);
    k:=pos(' ',str2);
    if k>1 then a[i]:=copy(str2,1,k-1);
    delete (str2,1,k)
  end;

  for k:=1 to i-1 do
  begin
    min:=a[k];
    l:=k;
    for j:=k+1 to i do
     if a[j]<min then
     begin
       min:=a[j];
       l:=j
     end;
    buf:=a[k];
    a[k]:=a[l];
    a[l]:=buf
  end;

  for k:=1 to i do writeln (a[k]);
  readln
end.

Последний раз редактировалось Stilet; 20.03.2009 в 09:44.
Irin@ вне форума Ответить с цитированием
Старый 20.03.2009, 00:00   #2
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
Сообщение Анализ

Код:
var str1,str2 : string;
var a : array [1..50] of string[15];
var min,buf : string[15];
var i,k,l,j : byte;
begin
writeln ('Enter string: ');
readln (str1); {ввод строки}
str2:=str1+' '; {добавление пробела и сохранение в другую переменную}
i:=0; {онулирование счетчика}
k:=1;
while (str2<>'') and (k<>0) do {пока введенная строка с пробелом не пуста}
begin
  while str2[1]=' ' do delete (str2,1,1); {удалить ведущие пробелы}
  inc(i); {инкремент счетчика}
  k:=pos(' ',str2); {поиск пробела}
  if k>1 {если пробел есть в тексте (из кода видно, что таковой будет при непустой строке, так как последный пробел находится на последней позиции). Кроме того, в лубом случае k<>1}
delete (str2,1,k)
    then a[i]:=copy(str2,1,k-1); {в отдельную ячейку помещаем слово от начала до первого пробела невключительно}
end;

for k:=1 to i-1 do {проход по всем выписанным словам (последнее слово всегда пустое за счет специфического положения инкремента в цикле)}
begin
  min:=a[k]; {извлекаем слово}
  l:=k; {запоминаем k}
  for j:=k+1 to i do {проходим по всем оставшимся словам}
    if a[j]<min then {если рассматриваемое слово менее сохраненного,}
      begin
        min:=a[j]; {определяем новый минимум}
        l:=j {запоминаем положение минимума}
      end;
  buf:=a[k]; {меняем местами текущий элемент общего цикла и локальный минимум}
  a[k]:=a[l]; {иными словами, этот цикл по k есть не что иное как сортировка прямым выбором}
  a[l]:=buf
end;

for k:=1 to i do writeln (a[k]); {вывод на печать}
readln {последный запрос пользователю}
end.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в задаче! dimmkka Помощь студентам 2 20.02.2009 20:09
помогите найти ошибку в задаче. Wia Помощь студентам 1 16.12.2008 19:15
помогите найти ошибку в задаче. Wia Помощь студентам 1 14.12.2008 17:19
помогите исправить ошибки в задаче на С++ Wia Помощь студентам 4 14.12.2008 16:09
Помогите исправить ошибку в задаче VANOLORD Паскаль, Turbo Pascal, PascalABC.NET 9 19.05.2008 22:16