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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [С++] Пожалуйста помогите с программой  (Прочитано 7831 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Lora05
Гость
« : 12-03-2009 10:09 » new

Пожалуйста, помогите написать программу на С++, которая считывает из файла текст(несколько строк, в каждой строке несколько слов, разделенных пробелом) и в каждой строке ищет самое короткое слово, вырезает его оттуда и ставит его в начало этой же строки
« Последнее редактирование: 12-03-2009 10:29 от Джон » Записан
Dimka
Деятель
Команда клуба

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

« Ответ #1 : 13-03-2009 12:46 » 

Код: (Ruby)
STDIN.each{|line|
 sourceWords=line.split
 shortestWord=sourceWords.sort{|word1,word2| word1.length<=>word2.length}[0]
 puts(sourceWords.select{|word| word!=shortestWord}.unshift(shortestWord).join(" "))
}
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Lora05
Гость
« Ответ #2 : 16-03-2009 10:42 » 

спасибо большое...но как-то \это очень сложно...мы такого еще не проходили, можно ли как-то это проще написать?
Записан
Dimka
Деятель
Команда клуба

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

« Ответ #3 : 16-03-2009 11:43 » 

Lora05, куда уж проще, чем в 3 строчки? Улыбаюсь И, конечно, вы этого не проходили - это не C++. Кто ж халяву обещал? Но общую идею одного из возможных решений из предложенного кода извлечь можно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

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

« Ответ #4 : 16-03-2009 12:35 » 

Уж лучше спросить, что сделано, что вызывает затруднение и в чём именно необходимо помочь. Ведь программа по сути уже написана в первом топике:

1. Ввод данных - загрузить из файла

2. Разбить данные на строки

3. Для каждой строки:

  3.1 Разбить строку на слова

  3.2 Найти самое короткое слово

  3.3 Вырезать его

  3.4 Вставить в начало строки

Не хватает логического завершения - сохранить полученные данные в файл... отобразить на экране...  показать статистику... Но может, как и в большинстве случаев, важен сам процесс, а не результат.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Lora05
Гость
« Ответ #5 : 30-03-2009 07:32 » 

Код:
#include<fstream.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>

#include"cl.h"

#define M 300


void cl::proverka(int k)
 {
  clrscr();
  if(k==1)
     {
      cerr<<"‚л ­Ґ Ї®¤Є«озЁ«Ё ⥪бв®ўл© д ©«!"<<endl;
      exit(1);
     }
  if(k>=3)
     {
      cerr<<"Њ®¦­® Ї®¤Є«оз вм в®«мЄ® 1 ⥪бв®ўл© д ©«!"<<endl;
      exit(1);
     }
 }



char **cl::vvod(char *name)
 {
  ifstream fin;

  char *ch;
  int i;

  fin.open(name);
  if(!fin)
  {
   cerr<<"ЌҐ г¤ «®бм ®вЄалвм "<<name<<endl;
   fin.clear();
   exit(1);
  }

  cout<<"’ҐЄг饥 ᮤҐа¦Ё¬®Ґ д ©«  "<<name<<":"<<endl;
  n=0;
  while(fin.getline(ch,M))
               {
    cout<<ch<<endl;
    n++;
   }
  fin.clear();
  fin.close();

  cout<<endl<<n<<" бва®зҐЄ ў "<<name<<endl;

  fin.open(name);
  for(i=0;i<n;i++)
   fin.getline(mas[i],M);

  fin.clear();
  fin.close();

  return mas;
 }



char **cl::obr(char **mas)
 {
  int i;

  for(i=0;i<n;i++) {
    if(i%2=0)toupper(mas[0][i])       
    }
  }
 
  return mas;
 }

void cl::vivod(char **mas)
{
  ifstream fin;
  ofstream fout;
  int a,i;
  char fn[50],c;

  cout<<endl<<"ЋЎа Ў®в ­­л© ¬ ббЁў:"<<endl;

  for(i=0;i<n;i++)
  cout<<mas[i]<<endl;


  do
    {
     cout<<endl<<"‡ ЇЁб вм ¬ ббЁў ў д ©«?(1-¤ ,2-­Ґв)"<<endl;
     cin>>a;
    }
  while((a!=1)&&(a!=2));

  if(a==1)
  {
   do
     {
      cout<<"‚ўҐ¤ЁвҐ Ё¬п ­®ў®Ј® д ©« :"<<endl;
      cin>>fn;
      fout.open(fn);
      if(!fout)
       {
cerr<<"ЌҐ г¤ «®бм ®вЄалвм "<<fn<<endl;
fout.clear();
       }
     }
   while(!fout);

   for(i=0;i<n;i++)
      fout<<mas[i]<<endl;
   fout.clear();
   fout.close();
  }
  else
      exit(1);

  fin.open(fn);
  cout<<"‘®¤Ґа¦Ё¬®Ґ § ЇЁб ­­­®Ј® д ©«  "<<fn<<":"<<endl;
  while (fin.get(c))
     cout<<c;
  fin.clear();
  fin.close();
}

тут кусок программы, точнее модуль с методами класса, в процедуре обработки нужно написать кусок, который переставлял бы самое короткое слово в начало строки.
« Последнее редактирование: 30-03-2009 07:39 от Sla » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines