Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. STIFFmaster

    STIFFmaster New Member

    Joined:
    11 Dec 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    помогите с лабораторной. Нужно осуществить поиск подстроки в строке без использования функций.
    я пробовал так:
    Code:
    #include <iostream.h>  
    void main()  
    {
      	char stroka[30];
      	char podstroka[6];
      	int ch=0;
      	cout<<" vvedite stroky:  ";
      	cin.getline(stroka, 30);
      	cout<<"\n vvedite iskomyjy podstroky:  ";
      	cin.getline(podstroka, 6);
      	for ( int i=0; i<50; i++)
      	{
      		if (podstroka[0]==stroka[i])&&
      	   	   (podstroka[1]==stroka[i])&&
      	   	   (podstroka[2]==stroka[i])&&
      	   	   (podstroka[3]==stroka[i])&&
      		   (podstroka[4]==stroka[i])&&
      	   	   (podstroka[5]==stroka[i]) ch++;  		
    }
      		cout<<ch;  		
    }  	  	  
    
    не получается...
     
  2. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    как ты представляешь логику твоей программы?
    ты на каждой итерации сравниваешь поочердено все символы подстроки с одним элементом. что неверно. ты должен сравнивать i-ый элемент строки с первым в подстроке. i+1-ый со вторым и тд.
    плюс избегай странных чисел, используй константы
     
  3. elusive.light

    elusive.light New Member

    Joined:
    29 Nov 2009
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    PLS помогите решить задачу реально сам не могу справиться. Мне её в понедельник надо сдать(28.12.09). Заранее очень благодарен :)

    В киоске продается растворимый кофе, предлагается ассортимент из трех известных кофейных торговых марок (названия на ваш выбор), а также варианты приготовления – полный стакан / половина стакана, от 0 до 2 ложек сахара. Сделайте объявление структуры данных, моделирующей заказ кофе. При этом для кода торговой марки обязательно применить конструкцию enum, а информацию о количестве воды и ложек сахара следует запаковать при помощи битовых полей в один байт. Нужно составить тестовую программу, использующую такую структуру.
     
  4. 043nKRuT0y

    043nKRuT0y Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    226
    Likes Received:
    8
    Reputations:
    0
    2 STIFFmaster :
    попробуй так :
    Code:
    void main()  
    {
      	char stroka[30];
      	char podstroka[6];
      	int ch=0;
      	cout<<" vvedite stroky:  ";
      	cin.getline(stroka, 30);
      	cout<<"\n vvedite iskomyjy podstroky:  ";
      	cin.getline(podstroka, 6);
      	for ( int i = 0; i < strlen(stroka); i++)
      	    for(int j = 0; j < strlen(podstroka); j++){
                    if(stroka[i] == podstroka[j]) ch++;    
                }  			
     cout<<ch;  		
    }
    Так должно получиться .... я только точно не помню правильно ли я указал функции определения длинны строки - то ли strlen() то ли len()
     
  5. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Интересно, а что данная функция считает ? Мозгом чувствую что что-то интересное, но что именно - понять не могу :D
     
  6. STIFFmaster

    STIFFmaster New Member

    Joined:
    11 Dec 2009
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    В програме должно выводить сколько раз встречается подстрока в строке.
     
  7. 043nKRuT0y

    043nKRuT0y Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    226
    Likes Received:
    8
    Reputations:
    0
    дык - так просто такую проверку добавь:
    Code:
    if(ch == strlen(podstroka)){
             kol_podstrok ++;
             ch = 0;
    }
    
    То есть если количество совпадений без прерывно равно длине подстроки значить ето она , и мы увеличиваем счетчик подстрок, и обнуляем счетчик совпадений дабы заново искать подстроку....
     
  8. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    Какой язык?

    Вот тебе на Сях
    Code:
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef enum {JACOBS, NESCAFE, TCHIBO} trade_mark_t;
    
    const char* sugar_msgs[] = {"без","с одной ложечкой","с двумя ложечками"};
    
    const char* water_msgs[] = {"стаканчик","половина стаканчика"};
    const char* trademark_msgs[] = {"JACOBS", "NESCAFE", "TCHIBO"};
    
    /* Структура заказа стаканчика кофе */
    typedef struct {
    	
    	/* Торговая марка */
    	trade_mark_t tm;
    	
    	/* битовое поле сахара и воды
    	 * 0x00 - полный стакан без сахара 
    	 * 0x01 - полстакана без сахара
    	 * 0x11 - полстакана с одной ложкой сахара
    	 * 0x21 - полстакана с двумя ложками сахара*/
    	uint8_t sugar_water;
    	
    } request_for_coffee_t;
    
    void check_correct(int have, int max);
    
    int main(int argc, char** argv)
    {
    	request_for_coffee_t request;
    	int sugar, water, tm;
    	
    	(void) printf("Какой марки кофе вы жаждете?\n");
    	(void) printf("[0] JACOBS\n[1] NESCAFE\n[2] TCHIBO\n");
    	(void) scanf("%d",&tm);
    	check_correct(tm,2);
    	
    	(void) printf("Сколько сахара?\n");
    	(void) printf("[0] без сахара\n[1] одна ложечка\n[2] две ложечки\n");
    	(void) scanf("%d",&sugar);
    	check_correct(sugar,2);
    	
    	(void) printf("Дозировка\n");
    	(void) printf("[0] стаканчик\n[1] половина стаканчика\n");
    	(void) scanf("%d", &water);
    	check_correct(water,1);
    	
    	request.tm = tm;
    	request.sugar_water = sugar;
    	request.sugar_water <<= 4;
    	request.sugar_water |= water;
    	
    	(void) printf("Вы заказали:\n");
    	(void) printf("%s ",water_msgs[request.sugar_water & 0x0F]);
    	(void) printf("%s\n",trademark_msgs[request.tm]);
    	(void) printf("%s сахара\n",sugar_msgs[request.sugar_water>>4]);
    	(void) printf("Спасибо, до свиданья!\n");
    	
    	return 0;
    }
    
    void check_correct(int have, int max) {
    	if(have >= 0 && have <=max)
    		return;
    	else {
    		fprintf(stderr, "Нет таких кнопок на кофейном автомате :)\n");
    		exit(1);
    	}
    }
    
     
    #2068 ss88, 27 Dec 2009
    Last edited: 27 Dec 2009
  9. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    У тебя не ищется подстрока. у тебя считется число совпадающих символов в двух строках.
     
  10. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    ss88 - http://en.wikipedia.org/wiki/Bit_field
     
  11. serg1991

    serg1991 New Member

    Joined:
    23 Aug 2006
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Помогите пожалуйста, скоро зачет, а массивы для меня - темный лес. К четвергу все задачи надо прорешать, помогите хотя бы несколько сделать.
    Условия по ссылке
    http://narod.ru/disk/16374301000/zachet.doc.html
     
  12. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    Мог бы дать ..."самый быстрый поиск" но не обьяснишь преподу ,раз проблемы с простейшим! Есть несколько миров в программировании!
    Code:
    ...
     int flag;
     for(i=0,ch=0;*(stroka+i)!=0;i++)
     {
      for(int j=0,flag=0;*(podstroka+j)!=0 && flag==0 && *(stroka+i+j)!=0;j++)
          if(*(stroka+i+j)!=*(podstroka+j))
              flag=1;
          if(flag==0)
             ch++;
     }
    
    
     
    #2072 Retimiled, 27 Dec 2009
    Last edited: 27 Dec 2009
  13. Sinex

    Sinex Elder - Старейшина

    Joined:
    17 Aug 2006
    Messages:
    111
    Likes Received:
    24
    Reputations:
    5
    Помогите пожалуйста с ассемблером.
    Шесть задач надо срочно сделать.
    + гарантируется
    1)Издающий писк, если слово оканчивается буквой "В"
    2)Стирающий экран при нажатии клавиши "END"
    3)Издающий писк только при вводе латинских букв.
    4)Издающий писк только при вводе букв кириллицы.
    5)Стирающий предыдущий символ при нажатии клавиш "wn" (эти две буквы при этом на экран выводиться не должны)
    6)Заменяющий все буквы Ы кириллицы на сочетание "йи"
     
  14. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    В *(stroka+i+j) будет выход за пределы строки.
     
  15. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    Code:
    bool strcheck(const char* src, const char* sub){
    	while ( (*src == *sub) && *sub ){
    		src++;
    		sub++;
    	}
    	return *sub == 0;
    }
    
    
    int find_substr(const char* text, const char* sub){
    	const char* cur_text = text;
    	const char* end_text = text + strlen(text) - strlen(sub);
    	int position = -1;
    
    	while(cur_text++ != end_text){
    		if(strcheck(cur_text, sub)){
    			position = cur_text - text;
    			break;
    		}
    	}
    
    	return position;
    }
    
    int main(){
    	char text[] = {"123 111 345 321 654"};
    	char sub[] = {"655"};
    	int position = find_substr(text, sub);
    
    	if(position != -1){
    		cout << "position: " << position << ", substring = " << sub << endl;
    	}
    	else{
    		cout << "substring not found" << endl;
    	}
    	return 0;
    }
    ps: strcheck можете заменить на вызов strcmp. главное соблюдать порядок параметров - первым идет текст, вторым искомая подстрока.
     
    #2075 Ra$cal, 27 Dec 2009
    Last edited: 27 Dec 2009
  16. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    2 algol

    Code:
    ...
     int flag;
     for(i=0,ch=0;*(stroka+i)!=0;i++)
     {
      for(int j=0,flag=0;*(podstroka+j)!=0 && flag==0 && *(stroka+i+j)!=0;j++)
          if(*(stroka+i+j)!=*(podstroka+j))
              flag=1;
          if(flag==0)
             ch++;
     }
    
    2-nd verson :D придумываю для вас прямо тут не проверяя .... так что проверяйте!
    Code:
    #include <stdio.h>
    void st(char *str1,char *str2,int l, int *sum)
    {
      if(*str1==0)
      {
          if(*str2==0)
           *sum++;
      }
      else 
         if(*str2==0)
            *sum++;
         else
            if(*str1==*str2)
              st(str1+1,str2+1,l+1,sum);
           else
              st(str1-l+1,str2-l,0,sum);
    }
    
    int main()
    {
     int sum=0;
     char str[]="srvferv ergergt4etr retgbrth4 wfwrefg4ert5 wqede";
     char stt[]="er";
     st(str,stt,0,&sum);
     printf("Совпадений:%d",sum);
    }
     
    #2076 Retimiled, 27 Dec 2009
    Last edited: 27 Dec 2009
  17. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    человеческая глупость не знает границ.
     
  18. xanser

    xanser New Member

    Joined:
    30 Jul 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    1) Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно один раз (в порядке, как они встречаются в тексте)
    2) Дан файл f, компоненты которого являются целыми числами. Найти количество квадратов простых чисел среди компонент.
    3) Даны символьные файлы f и g. Определить совпадают ли компоненты файла f с компонентами файла g. Если нет то получить номер первой компоненты, в которой исходные файлы отличаются между собой. В случае когда один из файлов имеет n компонент (n>=0) и повторяет начало другого (более длинного файла), ответом должно быть число n+1

    Задачи по C++.
     
  19. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    369
    Likes Received:
    92
    Reputations:
    5
    1. Бежим по символьно и каждый символ заносишь в хеш таблицу, потом распечатываешь те у который значение равно 1, (символ в этом случае ключ, а в хеш таблице они будут храниться в томже поряднке в каком в тексте встречаются)
    2. эм, ну, если я правильно понял, считываешь число из файла, возводишь в квадрат, смотришь простое ли это число, если да увеличиваешь счетчик на +1
    3. ...
    PS. я видно не в тему, тут не объяснять, а делать за вас надо ?
     
    #2079 cupper, 28 Dec 2009
    Last edited: 28 Dec 2009
  20. xanser

    xanser New Member

    Joined:
    30 Jul 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    интересно, спасибо, почитаю про хеш таблицы. задачи простые, но с++ не знаю совершенно. на паскале бы решил без проблем
     
Thread Status:
Not open for further replies.