Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск в линейном списке, не могу осуществить поиск в линейном спи 
:(
    Опции темы
Yuran89
Дата 20.7.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.1.2009
Где: }{рустовая

Репутация: нет
Всего: 1



Всем привет! У меня такая задачка: Текст помощи для некоторой программы организован в виде линейного списка.
Каждая компонента текста помощи содержит термин(слово)и текст,содержащий пояснения к этому термину.
Количество строк текста относящегося к одному термену составляет от одной до пяти.
  Написать программу, которая обеспечивает:
1) Начальное формирование текста помощи;
2) вывод текста помощи;
3) Вывод поясняющего текста для заданого термина.

1 и 2 пункты я сделал,а вот поиск по терминам не получается.Может кто подскажет?

вот код:
Код
#include<iostream.h>
#include<string.h>

struct text
{
    char termin[30];      
    char poiasnenie[40];
    text * next;
    text *pred;
};
text *first,*last,*temp;
void add()     // funkciia dobavlenia zapisei;
{
cout<<"Vvedite termin"<<endl;
    cin>>temp->termin;
    cout<<"Vvedite poiasnenie "<<endl;
            cin>>temp->poiasnenie;
            
            temp->next=new text;
            temp->next->pred=temp;
            temp=temp->next;
            last=temp;
        return;
}
void prosmotr()   //funkciia prosmotra vsego soderjimogo teksta;
{
    temp=first;
    while(temp!=last)
    {
            cout<<"Termin: "<<temp->termin<<endl;
            cout<<"Poiasnenie k terminu: "<<temp->poiasnenie<<endl;
            cout<<"________________________________________________"<<endl;
        temp=temp->next;
    }
}
void prosmotr1()//funkciia prosmotra poiasneniia k vvedennomu s klaviaturi terminu;
{
    char q[30];
    cout<<"vvedite termin: ";
    cin>>q;
    
}

void main()
{
    int n;
    temp = new text;
    first=temp;
    first->pred=NULL;
m:cout<<"dobaviti termin<<1>>; prosmotr vsego teksta<<2>>; prosmotr odnogo termina<<3>>;"<<endl;
    cin>>n;
switch (n){
    case 1:add(); break;
    case 2:prosmotr(); break;
    case 3:prosmotr1(); break;}
goto m;
}

PM MAIL WWW   Вверх
zim22
Дата 20.7.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Yuran89 @  20.7.2009,  15:56 Найти цитируемый пост)
1 и 2 пункты я сделал,а вот поиск по терминам не получается.Может кто подскажет?

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


--------------------
PM MAIL   Вверх
Yuran89
Дата 20.7.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.1.2009
Где: }{рустовая

Репутация: нет
Всего: 1



ну вот я переделал.только видимо я не правильно задаю условие.Можно такое условие писать?:
Код

void prosmotr1()//funkciia prosmotra poiasneniia k vvedennomu s klaviaturi terminu;
{
    char q[30];
    int z=0;
    cout<<"vvedite termin: ";
    cin>>q;
        temp=first;
    while(temp!=last)
    {
        if (temp->termin==q)//zdesi pomoemu owibka
    {
            cout<<"Termin: "<<temp->termin<<endl;
            cout<<"Poiasnenie k terminu: "<<temp->poiasnenie<<endl;
            cout<<"________________________________________________"<<endl;
        z=z+1;}
    
        temp=temp->next;
    }
    if (z==0)
    cout<<"net nakogo termina."<<endl;
    
}

подскажите как правильно условие задать.

Это сообщение отредактировал(а) Yuran89 - 20.7.2009, 16:56
PM MAIL WWW   Вверх
zim22
Дата 20.7.2009, 16:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Yuran89 @  20.7.2009,  16:55 Найти цитируемый пост)
if (temp->termin==q)//zdesi pomoemu owibka

С-строки сравниваются С-функцией strcmp. вы же сравниваете указатели.


--------------------
PM MAIL   Вверх
Yuran89
Дата 20.7.2009, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.1.2009
Где: }{рустовая

Репутация: нет
Всего: 1



zim22, большое спасибо,теперь все работает.
Мне осталось реализовать вот это:" Количество строк текста относящегося к одному термену составляет от одной до пяти"Каким образом это сделать?Задать многомерный массив        char poiasnenie[5][40]?
PM MAIL WWW   Вверх
zim22
Дата 20.7.2009, 17:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Yuran89 @  20.7.2009,  17:13 Найти цитируемый пост)
"Каким образом это сделать?Задать многомерный массив char poiasnenie[5][40]?

так тоже можно.
а можно poiasnenie хранить в виде того же линейного списка.  каждый элемент которого будет эквивалентом строки текста. но в этом случае количество строк(т.е. элементов списка) может быть любым (и больше, и меньше пяти). 
но это нормально, т.к. подходит к условию:
Цитата(Yuran89 @  20.7.2009,  15:56 Найти цитируемый пост)
Количество строк текста относящегося к одному термену составляет от одной до пяти.

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




--------------------
PM MAIL   Вверх
Yuran89
Дата 20.7.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 16.1.2009
Где: }{рустовая

Репутация: нет
Всего: 1



и есть еще вопрос: почему я не могу вводить пояснение через пробел?если ввожу одно слово то все нормально,а вот если несколько слов через пробел то он зацикливается.
PM MAIL WWW   Вверх
zim22
Дата 21.7.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Yuran89 @  20.7.2009,  20:54 Найти цитируемый пост)
?если ввожу одно слово то все нормально,а вот если несколько слов через пробел то он зацикливается.

по умолчанию cin считывает из потока ввода до пробела. после пробела будет уже следующее слово.
используйте getline
Код

#include <iostream>
std::string line;
getline(std::cin, line);





--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.