Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
#1

Задача со списком - C++

30.09.2012, 00:41. Просмотров 561. Ответов 8
Метки нет (Все метки)

Всем привет, задали задачу со списком, но работаю с ними впервые и дается довольно не просто, возникло пара проблем:
Условие:
Введите список, содержащий сведения об экспортируемых товарах. Список имеет следующую структуру: наименование товара - страна, импортирующая товар - объем поставляемой партии в штуках. Программа должна заполнить список, вывести его на экран в виде таблицы, а затем при вводе наименования товара найти страны, в которые экспортируется данный товар и общий объем его экспорта. Отсортируйте список по полю «наименование товара» и по полю «объем поставляемой партии».
+ ввод данных из файла.

1 - вроде понимаю как заполнить из файла, но написать не выходит, + как вывести 3 списка в таблицу, ну и правильно я начинаю сортировать?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
struct spisok
{
    char value;
    spisok *next;
};
 
///////////////////////////
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    spisok *t, *head;
    spisok *Res;
 
    head = new ( spisok );
    t = head;
 
 
    for ( int i = 0; i<5; i++ )  // заполнение списка 1 из файла
    {
        (*t).next = new ( spisok );
        t = (*t).next;
        (*t).value =  ;    // тут нужно заполнить из файла
        (*t).next = NULL;
    }
 
    ////////поиск
 
    char res;
    cout<<"введите наименование для поиска: ";   //ввожу слово для поиска
    cin>>res;
 
    Res = NULL;
    t = head;
    t = (*t).next;
 
    while ( (t != NULL) && Res == NULL )
        if ((*t).value == res)
            Res = t;
        else t = (*t).next;
хочу пока написать рабочий код для одного списка, потом уже оформить в функции.

спасибо

Добавлено через 3 часа 31 минуту
никто не подскажет, как из файла список заполнить?

пробовал так, но пока безрезультатно
C++
1
2
3
4
5
6
7
8
ofstream f("text.txt");
for ( int i = 0; i<5; i++ )  // заполнение списка 1 из файла
    {
        (*t).next = new ( spisok );
        t = (*t).next;
        f>>(*t).value;
        (*t).next = NULL;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2012, 00:41     Задача со списком
Посмотрите здесь:

Задача с односвязным списком - C++
Ребята, нужна помощь, кто может составьте. Буду благодерен. У меня не получается, т.к руки кривые. Задача: Напишите программу,...

Задача с односвязным и двухсвязным списком (сортировка). - C++
Условие: Структура содержит название издания, газета или журнал, цена экземпляра. Добавлять новые издания так, чтобы названия были...

Задача Иосифа Флавия, решение циклическим списком - C++
http://andrei-sapeshko.blogspot.ru/2013/04/blog-post.html тут есть пример, но он немного непонятный. struct node { int item; ...

Как реализовать работу со списком строк и списком цифр в классе List? - C++
Добрый день! Проблема такая Есть класс-список: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace...

Нужны задачки для упражнения в работе со списком, стеком, очередью и двусвязным списком - C++
Недавно научился строить список, стек, очередь, двусвязный список в С++, что бы закрепить навыки мне нужны задачки. Можете подсказать, где...

В чем разница между простым линейным списком, и динамическим линейным списком? - C++
вопрос в теме

Программа со списком - C++
Всем доброго времени суток! Хотел бы уточнить через какую оболочку запускать программу, а то стоит борланд пятый и выдает при запуске ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
just_dude
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
30.09.2012, 01:08     Задача со списком #2
В с++ есть встроенные списки list например. Вот пример использования:

http://cyberguru.ru/visual-cpp/visua...ib-page10.html

Освоить не трудно. Вот писал я без использования list:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//Односвязный список
#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
 
struct Value
{
        public:int data;
        Value* Next;
        Value(int d):Next(0),data(d){}
        ~Value(){data=0;}
};
 
class Stack
{
        Value* Head;
        public:void Add(int d);
        public:void Delete();
        public:void Print();
        public:Stack(){Head=NULL;}
};
 
void Stack::Add(int d)
{
        Value* newHead=new Value(d);    
        newHead->Next=Head;
        Head=newHead;
}
 
void Stack::Delete()
{
        Value *p;
        p=Head->Next;
        delete Head;
        Head=p;
}
 
 
void Stack::Print()
{
        Value *p=Head;
        while(p!=NULL)
        {
                cout<<p->data<<"  ";
                p=p->Next;
        }
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
        Stack elements;
 
        elements.Add(10);
        elements.Add(1);
        elements.Add(3);
        elements.Add(7);
        elements.Add(9);
        elements.Add(4);
 
        elements.Delete();
        elements.Delete();
 
        elements.Print();
 
        system("pause");
        return 0;
}
Вникни как работает, допили нужное.
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
30.09.2012, 15:46  [ТС]     Задача со списком #3
а если у меня есть массив из элементов, а мой список заполняется этим массивом - как мне обратиться к примеру к 2 или 3 элементу?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  int myints[5];   //заполняем массив
  for ( int i = 0; i<5; i++)
  {
      cin>>myints[i];
  }
  list<int> mylist (myints,myints+5);
  list<int>::iterator it;
 
  cout << "mylist contains:";
  for ( it=mylist.begin() ; it != mylist.end(); it++ )
    cout << " " << *it;
  cout << endl;
 
  return 0;
}
just_dude
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
01.10.2012, 00:06     Задача со списком #4
Если используете list, то вы правильно написали. Циклом проходите. Итератор-обычный указатель.

Но что получить доступ на изменение, используйте deque

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include <iostream>
#include <deque>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
  int myints[5];   //заполняем массив
  for ( int i = 0; i<5; i++)
  {
      cin>>myints[i];
  }
  deque<int> mylist (myints,myints+5);
  deque<int>::iterator it;
 
  cout << "mylist contains:";
 
 //Теперь этот цикл бесполезен 
  for ( it=mylist.begin() ; it != mylist.end(); it++ )
    cout << " " << *it;
 
  //Обратится к любому элементу можно с помощью функции mylist.at(3) или скобок mylist[3]
 
  cout<<mylist[3]<<endl;
  mylist[3]=100500;
  cout<<mylist[3]<<endl;
 
 
  cout << endl;
  char c;
  cin>>c;
  return 0;
}
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
01.10.2012, 00:31     Задача со списком #5
Цитата Сообщение от just_dude Посмотреть сообщение
Но что получить доступ на изменение, используйте deque
Чтобы был доступ на изменение, нужно всего лишь использовать iterator, а не const_iterator. Или вы считаете, что в контейнере list данные изменить нельзя?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <list>
 
using namespace std;
 
int main()
{
  int myints[5];   //заполняем массив
  for ( int i = 0; i<5; i++)
  {
      myints[i] = i;
  }
  list<int> mylist (myints,myints+5);
  list<int>::iterator it;
 
  cout << "mylist contains:";
  for ( it=mylist.begin() ; it != mylist.end(); it++ )
  { 
    cout << " " << *it;
    *it = 42; 
    cout << " " << *it; 
  } 
  cout << endl;
 
  return 0;
}
just_dude
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
01.10.2012, 01:27     Задача со списком #6
Цитата Сообщение от I.M. Посмотреть сообщение
Чтобы был доступ на изменение, нужно всего лишь использовать iterator, а не const_iterator. Или вы считаете, что в контейнере list данные изменить нельзя?
Не считаю. Итератор это обычный указатель. Написал же выше.
iterator++;
*iterator=100500;

Чтоб добраться до середины нужно пройтись циклом. Поэтому посоветовал более оптимальный вариант
I.M.
01.10.2012, 13:28
  #7

Не по теме:

just_dude, просто формулировка не очень удачная была, согласитесь. и чтобы спасти ТС от заблуждений, я решил прояснить этот момент)

sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
01.10.2012, 21:06  [ТС]     Задача со списком #8
так а я могу использовать deque с char или string'ом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2012, 17:50     Задача со списком
Еще ссылки по теме:

Непонятки со списком - C++
Нашёл код в интернете и немного не понимаю его в некоторых местах. Объясните мне пожалуйста, зачем в коде вот тут: ...

Поле со списком - C++
Установлено соединение с БД Access. Средствами C# поместил на область данных поле со списком. Какой командой вывести информацию с БД в поле...

Операции со списком - C++
когда вставляю новый элемент, то почему-то вставляется на начало а не на заданную позицию. и при удалении тоже - удаляется первый элемент...

запутался со списком - C++
Всем доброго времени суток! Помогите пожалуйста разобраться, я сделал класс spisok , в нем несколько нужных мне структур и методов,...

Баг с бинарным списком - C++
Доброго времени суток, я написал функцию, которая сравнивает т.н. &quot;Индивидуальный план&quot; ученика(список выбранных учебных предметов) со...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
just_dude
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
02.10.2012, 17:50     Задача со списком #9
Цитата Сообщение от sanchoflat Посмотреть сообщение
так а я могу использовать deque с char или string'ом?
хоть со своими классами. Изучайте с++ "шаблоны" и сразу всё станет ясно
Yandex
Объявления
02.10.2012, 17:50     Задача со списком
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru