Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3 4 ... 7   Вниз
  Печать  
Автор Тема: Самое длинное и короткое слово  (Прочитано 154577 раз)
0 Пользователей и 10 Гостей смотрят эту тему.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« : 17-12-2009 12:00 » 

Всем привет.

нужна помощь в элементарной задачке: Вывести на экран самое длинное и самое короткое слово из строки, введеной пользователем.
Так как я совсем новичок в этом для меня это трудно. Я даже толком алгоритм не могу составить. Помогите пожалуйста!
« Последнее редактирование: 20-12-2009 18:15 от Sla » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-12-2009 12:42 » 

Dana, У тебя есть предложение

Я пошла по воду

Расскажи словами как ты найдешь самое длинное слово?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #2 : 18-12-2009 07:02 » 

Я пошла по воду.
Начало.
Обнулить счетчик
Считать 1 символ
Проверить пробельный ли это символ
нет
проверить пробельный ли это символ и т д
Да
Проверить конец строки
нет
Проверить новое слово
да
Первое слово взять за макс кол-во знаков запомнить
считать 1 символ нового слова
проверить пробельный и тд
Если больше предыдущего слова, то запомнить это слово
ну и вывести на экран самое длинное слово.

Такой же алгоритм и для самого маленького слова.
Как соединить два не могу сказать
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-12-2009 07:08 » 

Dana, точно также, только этапа проверки слова с последним максимальным/минимальным должно быть два и расположены они последовательно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 18-12-2009 07:10 » 

в большинстве языков нет необходимости парсить строку на уровне символов. проще загнать слова в список, например, и найти в нём самую длинную и самую короткую строку.

а с маленьким всё точно так же: просто вести два счётчика букв. после первого слова оба они равны. на следующем слове если оно больше - первый увеличиваем, если меньше - второй уменьшаем.
Записан

Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 18-12-2009 07:19 » 

Dana, умничка!

Но ты сразу попыталась перевести слова в "машинный" код. А я попросил словами

Я пошла по воду.

1. Найти слова в предложении.
2. Среди слов найти самое длинное(короткое).

1. Пункт мы пропустим и приступим к нему позже

2. Среди слов найти самое длинное(короткое).
Пусть самое длинное(короткое) слово будет первым, и назовем его эталонным
Пока все слова не кончились
    Сравнивать его с эталонным.
    Если Слово длиннее(короче) эталонного, то запомнить его как эталонное
Перейти к следующему слову.

Заметь, я постарался как можно меньше применять "машинного"  языка.



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #6 : 18-12-2009 08:04 » 

Ну, почти получилось )) Я думала, совсем не справлюсь. А что, правда, значит "парсить"?
И что мне теперь делать?
« Последнее редактирование: 18-12-2009 09:45 от Sel » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
x77
Команда клуба

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 18-12-2009 08:19 » 

А что правда значит "парсить"?

в данном контексте - разделять на составляющие элементы.
Записан

Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 18-12-2009 08:23 » 

парсить - это значит разобрать строку.

В данном случае - разбить строку на слова

Раз ты поняла как словесно писать, попробуй разбить предложение на слова. Словами.
Чтобы усложнить задачу Улыбаюсь предлагаю следующее предложение:

Эта строка, в отличие от предыдущей, предназначена для построения словесного алгоритма, а другими словами - пропарсить.

Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #9 : 18-12-2009 09:35 » 

Вот блок-схема к тому алгоритму. Правильно?

Sla, что значит "разбить предложение на слова. Словами."

Спасибо всем за помощь, очень хочется разобраться в этом. Радуюсь успехам, как ребенок конфетке ))

* блок-схема.jpg (284.59 Кб - загружено 1220 раз.)
« Последнее редактирование: 18-12-2009 09:44 от Sel » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 18-12-2009 09:49 » 

Маленький совет. Представь себе, что сложных команд не существует: "сравнить слово 2 с 1", "пока не конец строки".

Есть просто вопросы, на которые можно дать ответ ДА или НЕТ:

конец строки? ДА / НЕТ
длина слова 2 > длины слова 1? ДА / НЕТ

и тд

2. Обрати внимание. У тебя есть повторяющиеся команды в разных частях блок-схемы (алгоритма). Например, "Обнулить счётчик слов", "Запомнить как эталон для большого" и др.

Но в целом - молодец. Хорошо продвигаешься вперёд.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 18-12-2009 09:53 » 

Sla, что значит "разбить предложение на слова. Словами."

Это значит, что ты должна просто рассказать кому-нить (сестре, брату, маме, папе, бабушке, подруге и тд) кто понятия не имеет о программировании, что нужно сделать с предложением, чтобы получить отдельные слова. Короче без использования специальных терминов. Просто своими словами на нормальном человеческом языке. На "нечеловеческом" это называется - ты теперь это уже знаешь - парсинг. Смысл? Допустим термин ты уже знаешь, но важнее всего - ты должна чётко уяснить, какая логика за ним скрывается. Без этого грош цена твоим знаниям (крутых словечек).
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 18-12-2009 10:00 » 

Dana, С такими-то результатами! Браво!

А теперь на бис.

Расскажи как ты разобьешь на слова следующее  предложение.

Эта строка, в отличие от предыдущей, предназначена для построения словесного алгоритма, а другими словами - пропарсить.


Пока прошу рассказать на человеческом языке. (это именно, то что я просил - словами)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 18-12-2009 10:02 » 

немножко дегтя к вложению. С этим рисунком подойди к преподавателю, чтоб он тебе "руку" поставил. Есть там маленькие грешки.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #14 : 20-12-2009 16:04 » 

Чтобы подойти теперь еще надо это все на С написать ((
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 20-12-2009 18:13 » new

Dana, ты только начни...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #16 : 21-12-2009 04:09 » 

Вот немного переделанная блок схема.
Сейчас буду пробовать написать программу )) Не надо

* блок-схема.jpg (307.73 Кб - загружено 1191 раз.)
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 21-12-2009 07:05 » 

Придется  взять функцию преподавателя.

* блок-схема.jpg (184.21 Кб - загружено 1114 раз.)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #18 : 21-12-2009 08:02 » 

а где окончание цикла?
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 21-12-2009 08:11 » 

как где?
А стрелочка влево? напечатать и в конец?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #20 : 21-12-2009 08:35 » 

Вот что получилось написать с помощью интернета и разных глав книг:
Код:
#include<stdio.h>
#include <stdlib.h>

char c, cpr, a[20], b[20];          //с - рабочий(текущий) символ, сpr - символ, предшествующий(предыдущий), а - текущее слово, б - самое длинное слово
int i=0, j=0,


MAIN()
{
    int count = 0;
    short state = 0;
    char c = getchar();                          //первый символ
  while((c=getchar())!=EOF)         //проверка на конец файла
  { cpr=c;                                //текущий символ становиться предыдущим
    char c = getchar();                          //а на место текущего вводиться новый
    if(cpr==' ' && c!=' ')               //проверка на начало слова
    { n++;                                  //номер текущего слова
      for(i=0;c!=' ';i++)               // начинаеться считывание символов в массив (чтобы сформировать слово) вплоть до пробела(конца слова)
      { a[i]=c;                                
     char c = getchar();
      }
      if(i>j)                             //кол-во букв в текущем слове больше чем в самом длинном? если да, то слово из рабочего массива переноситься в массив b и становиться самым длинным
      { for(j=0;j<=i;j++)
    {b[j]=a[j];}
        }
  }                                                     //конец цикла
  printf("The longest word is: ");           // вывод
  for(i=0;i<=j;i++)
  { printf("%c", b[i]);}
 return 0;
}
« Последнее редактирование: 21-12-2009 08:36 от Sla » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #21 : 21-12-2009 08:41 » 

Просто конец цикла вроде обозначают типа трапеции перевернутой, а конец из цикла нужен?
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 21-12-2009 08:44 » 

Код:
for(i=0;c!=' ';i++)               // начинаеться считывание символов в массив (чтобы сформировать слово) вплоть до пробела(конца слова)
      { a[i]=c;                               
     char c = getchar();
//А в этом месте БАЦ! Конец файла.
      }

Считываем символы пока не конец файла
 Если символ пробел, то конец слова и это слово нужно запомнить
 Если запомненное слово >= эталонному (смотри алгоритм)
Конец чтения из файла.

Похоже?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #23 : 21-12-2009 10:03 » 

а так:
Код:
MAIN()
{
    int count = 0;
    short state = 0;
    char c = getchar();                          //первый символ
  while((c=getchar())!=EOF)         //проверка на конец файла
  { cpr=c;                                //текущий символ становиться предыдущим
    char c = getchar();                          //а на место текущего вводиться новый
    if(cpr==' ' && c!=' ')               //проверка на начало слова
    { n++;                                  //номер текущего слова
      for(i=0;c!=' ';i++)               // начинаеться считывание символов в массив (чтобы сформировать слово) вплоть до пробела(конца слова)
      { a[i]=c;
}
      if(i>j)                             //кол-во букв в текущем слове больше чем в самом длинном? если да, то слово из рабочего массива переноситься в массив b и становиться самым длинным
      { for(j=0;j<=i;j++)
    {b[j]=a[j];}
        }
  }                                                     //конец цикла
  printf("The longest word is: ");           // вывод
  for(i=0;i<=j;i++)
  { printf("%c", b[i]);}
 return 0;
}
« Последнее редактирование: 21-12-2009 10:17 от Sla » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 21-12-2009 10:20 » 

Код:
1. while((c=getchar())!=EOF)         //проверка на конец файла
2.   { cpr=c;                                //текущий символ становиться предыдущим
3.     char c = getchar();                          //а на место текущего вводиться новый

Смотри, что ты делаешь.
1. прочитала символ
2. сохранила
3. прочитала символ - а тут БАЦ Конец файла. и ошибка.

зы свой код оформляй тегами [code][/code]
Нажимаешь ответ, кнопка в виде решетки.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #25 : 21-12-2009 11:20 » 

Блин, так:
Код:
#include<stdio.h>
#include <stdlib.h>

char c, cpr, a[20], b[20];          //с - рабочий(текущий) символ, сpr - символ, предшествующий(предыдущий), а - текущее слово, б - самое длинное слово
int i=0, j=0,

MAIN()
{
    int count = 0;
    short state = 0;
{char c = getchar();                          //первый символ
  while((c=getchar())!=EOF)         //проверка на конец файла
  { cpr=c;                                //текущий символ становиться предыдущим
    char c = getchar();                    //а на место текущего вводиться новый
    if(cpr==' ' && c!=' ')          //проверка на начало слова
    { n++;                                  //номер текущего слова
      for(i=0;c!=' ';i++)               // начинаеться считывание символов в массив (чтобы сформировать слово) вплоть до пробела(конца слова)
      { a[i]=c;
      if(i>j)                             //кол-во букв в текущем слове больше чем в самом длинном? если да, то слово из рабочего массива переноситься в массив b и становиться самым длинным
      { for(j=0;j<=i;j++)
    {b[j]=a[j];}
        }
  }                                                     //конец цикла
  printf("The longest word is: ");           // вывод
  for(i=0;i<=j;i++)
  { printf("%c", b[i]);}
 return 0;
}
« Последнее редактирование: 21-12-2009 11:33 от Sla » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 21-12-2009 11:34 » 

Dana, метод тыка здесь не поможет Жаль
Ты же можешь!
Спокойно, по алгоритму и все у тебя получится.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #27 : 22-12-2009 03:32 » 

#include<stdio.h>
#include <stdlib.h>

char c, cpr, a[20], b[20];          //с - рабочий(текущий) символ, сpr - символ, предшествующий(предыдущий), а - текущее слово, б - самое длинное слово
int i=0, j=0,

MAIN()
{
    int count = 0;                      //Онулить счетчик
    short state = 0;
{char c = getchar();                          //первый символ
  while((c=getchar())!=EOF)         //проверка на конец файла
  { cpr=c;                                //текущий символ становиться предыдущим
    char c = getchar();                    //а на место текущего вводиться новый
    if(cpr==' ' && c!=' ')          //проверка на начало слова

если это условие выполняется, то начинается новое слово, а текущее запоминается как эталон
если нет то продолжается считывание символов
как это реализовать программно не знаю (((
спасибо за помощь
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #28 : 22-12-2009 07:14 » 

Новая задачка:
Используя обменную сортировку, отсортировать по возрастанию элементы целочисленного массива, введённого пользователем.

С той пока проблемы... Решила отложить, пока вижу что, после if что-то не то, но что? Может осенит.
« Последнее редактирование: 22-12-2009 11:56 от Алексей1153++ » Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Dana
Опытный

ru
Offline Offline
Пол: Женский

« Ответ #29 : 22-12-2009 11:55 » 

блок схема к новой задаче

* блок-схема.jpg (272.79 Кб - загружено 1185 раз.)
Записан

Прославься в городе - возбудишь озлобленье, а домоседом стань - возбудишь подозренье. Не лучше ли тебе, хотя б ты Хызром был, ни с кем не знаться, жить всегда в уединенье?
Страниц: [1] 2 3 4 ... 7   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines