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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 18:08   #1
Rishka
 
Регистрация: 16.03.2013
Сообщений: 4
По умолчанию программа на строки

Дан текст. Напечатать все различные слова и для каждого слова указать количество повторений. Различие строчных и прописных букв во внимание не принимать.

Помогите, пожалуйста, переделать программу, чтобы выводить два наиболее часто встречающихся слова(указав число повторений)
Вот программа первой задачи
Код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale>
 
int main() 
{
   setlocale(LC_ALL, "Russian");
   char c[256];
   char *a[256];
   char *ch=" .,?!:;-";
   int i,j,k,s,p[255],h,d,f;
   do{
	do 
	{
		do
		{
			printf("\nВведите текст:\n");
			gets(c);
			strlwr(c);
		}
		while(c[0]==NULL);
		a[0]=strtok(c,ch);
	}
	while (a[0]==NULL);
	   
	   
            i=1;
            h=0;
	for (i=1; a[i]=strtok(NULL,ch);i++);
            for(j=0; j<i; j++)
            {
	   	 s=0;
              	 f=0;
 //число повторений каждого слова
                	for(k=0; k<i; k++) 
	    	{
	          		 if (strcmp(a[j], a[k]) == 0)   s++; 
                      
               	 }
            
	   	

//флаг 
		for(d=0; d<h; d++) 
               	{ 
	         		  if (strcmp(a[j], a[d]) == 0)   f++;  
              	 }
//кол-во разных слов
           
	  	if(s > 0 && f == 0) 	
            	{
			a[h]=a[j];
	            	p[h]=s;
                        	h++;
             	}
         	}
   
      	 for(j=0; j<h; j++) 
        	{
		printf("\nСлово: %s",a[j]);
	      	printf("\nПовторений: %i",p[j]);
                        printf("\n");
       	 }
   
        printf("\n");
        printf("\Нажмите любую клавишу для продолжения, Esc - выход.\n");
        fflush(stdin);
   }
   
   while(getch()!=27); 
}

Последний раз редактировалось Stilet; 21.03.2013 в 19:10.
Rishka вне форума Ответить с цитированием
Старый 21.03.2013, 21:44   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Найди в массиве p два самых больших числа. Запомни их индексы - это будут номера нужных слов.
Son Of Pain вне форума Ответить с цитированием
Старый 22.03.2013, 04:55   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

отсортируй и выведи 2 крайних
rrrFer вне форума Ответить с цитированием
Старый 22.03.2013, 07:36   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Сортировать - неэффективно, это от O(N*log(N)) до O(N^2), тогда как два наибольших находятся за один проход O(N).
s-andriano вне форума Ответить с цитированием
Старый 22.03.2013, 07:43   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Сортировать - неэффективно, это от O(N*log(N)) до O(N^2), тогда как два наибольших находятся за один проход O(N).
да, но зато проще некуда ) Я думаю ТС совсем неважна эффективность..
rrrFer вне форума Ответить с цитированием
Старый 22.03.2013, 08:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
да, но зато проще некуда ) Я думаю ТС совсем неважна эффективность..
ой, да не смешите мои тапочки!
А что, два наибольших значения из массива найти сложнее, чем отсортировать массив?!!
Зачем делать неэффективно, если можно сделать так же просто, но ЭФФЕКТИВНО?!



p.s. даже если написать ДВА отдельных цикла - в одном найти первое наибольшее значение, во втором цикле - второе, то даже так будет проще и эффективнее, чем сортировать массив
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.03.2013, 09:31   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
ой, да не смешите мои тапочки!
А что, два наибольших значения из массива найти сложнее, чем отсортировать массив?!!
и не пытаюсь смешить Ваши тапочки
отсортировать массив можно каким-нить qsort или std::sort и при этом думать совсем не надо )

Цитата:
p.s. даже если написать ДВА отдельных цикла - в одном найти первое наибольшее значение, во втором цикле - второе, то даже так будет проще и эффективнее, чем сортировать массив
N = 3, например
rrrFer вне форума Ответить с цитированием
Старый 22.03.2013, 13:35   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
да, но зато проще некуда ) Я думаю ТС совсем неважна эффективность..
Об этом думать следует не Вам, а ТС.
Ваше же дело, уж если предлагаете явно неэффективный алгоритм, не забудьте сообщить о его неэффективности.

Цитата:
Сообщение от rrrFer Посмотреть сообщение
отсортировать массив можно каким-нить qsort или std::sort и при этом думать совсем не надо )
Вы обратили внимание, что речь идет об учебной задаче?
Или Вы искренне полагаете, что не думать - это именно то, чему следует научить студента?

Последний раз редактировалось s-andriano; 22.03.2013 в 13:37.
s-andriano вне форума Ответить с цитированием
Старый 22.03.2013, 15:20   #9
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Вы обратили внимание, что речь идет об учебной задаче?
верно, я обратил внимание что это учебная задача, поэтому предложил неэффективный алгоритм, т.к. студенту безразлично как быстро работает его программа. Студенты, которым не безразлично, такие темы не создают.

Цитата:
Об этом думать следует не Вам, а ТС.
Вы ограничиваете мою свободу мысли, или мне кажется?
rrrFer вне форума Ответить с цитированием
Старый 22.03.2013, 17:36   #10
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Студенты, которым не безразлично, такие темы не создают.
Студентов, которые создают такие темы, нужно либо учить (в том числе думать), либо отчислять.
Над вторым мы не властны.
Цитата:
Вы ограничиваете мою свободу мысли, или мне кажется?
Нет, я ограничиваю Вашу свободу слова условием типа "Если сказал А, - говори Б" (если предложил неэффективный алгоритм, - сообщи об этом).
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа(строки) на С Johny91 Помощь студентам 3 11.06.2012 22:34
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Программа на строки Alex_12Proxy Паскаль, Turbo Pascal, PascalABC.NET 3 20.03.2012 14:24
Программа на строки в с++ Scerob Общие вопросы C/C++ 0 27.12.2011 16:00
Программа на строки Mr_sniper Паскаль, Turbo Pascal, PascalABC.NET 0 27.10.2011 21:35