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

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

Войти
Регистрация
Восстановить пароль
 
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
#1

Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером - C++

08.02.2014, 11:42. Просмотров 906. Ответов 7
Метки нет (Все метки)

Структура "Информация":
- носитель;
- объем;
- название;
- автор.
Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером.
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
#include <iostream>
#include <string>
using namespace std;
 
struct Inform
{
   string name;
   int v;
   string autor;
   string nositel;
};
 
void ShowData(Inform *M, int N)
{
   for (int i = 0; i < N; i++)
    {
     cout << M[i].name << endl;
     cout << M[i].v << endl;
     cout << M[i].autor << endl;
     cout << M[i].nositel << endl;
     cout << endl;
    }
}
void GetData(Inform *M,int N)
{
    for (int i=0; i < N; i++)
    {
        cout << "NAZVANIE: "; cin >> M[i].name;
        
        cout << "OBIEM: "; cin >> M[i].v;
 
        cout << "AUTOR: "; cin >> M[i].autor;
        
        cout << "NOSITEL: "; cin >> M[i].nositel;
        cout << endl;
    }
}
  
int main()
{
    int N; cout << "Vvedite  N: "; cin >> N;
    Inform *M = new Inform[N];
    GetData(M, N); 
    ShowData(M, N); 
    delete [] M;
    system("PAUSE");
    return 0;
}
Добавлено через 2 минуты
И как записать все в файл, и удалить запись с желаемым объемом.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 11:42     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
Посмотрите здесь:
Сформировать однонаправленный список и добавить элемент перед элементом с заданным ключом C++
C++ Удалить элемент с заданным номером и добавить К элементов в начало списка
C++ Удалить из списка элемент с заданным номером и добавить элементфы, начиная с заданного номера.
Удалить элемент структуры с заданным номером медицинской карты, добавить 2 элемента в начало файла C++
C++ Указатели . Удалить из одномерного массива элемент с заданным номером, добавить К элементов, начиная с заданного номера
C++ Перед указанным элементом массива вставить новый элемент
C++ Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером, удалить К
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
08.02.2014, 11:55     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #2
Запись в файл
C++
1
2
3
4
5
6
7
8
9
10
11
void StoreData(ostream out,Inform *M, int N)
{
   for (int i = 0; i < N; i++)
   {
     out << M[i].name << endl;
     out << M[i].v << endl;
     out << M[i].autor << endl;
     out << M[i].nositel << endl;
     out << endl;
   }
}
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
08.02.2014, 12:02  [ТС]     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #3
А файл сам создастся и с каким именем? Это где указывать?
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
08.02.2014, 12:05     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #4
Удаление всех элементов с заданным объемом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void DeleteElem(int v0,Inform *M, int &N)
{
   for (int i = 0; i < N; i++)
    {
         if(M[i].v==v0)
         {
             for (int k = i; k < N-1; k++)//сдвиг всех элементов на один
             {
                M[k].name=M[k+1].name;
                M[k].v=M[k+1].v;
                M[k].autor=M[k+1].autor;
                M[k].nositel=M[k+1].nositel;
             }
             N--; // количество элементов уменьшилось
             i--; // надо снова проверить, что теперь на i-ом месте.
         }
    }
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
    int N; cout << "Vvedite  N: "; cin >> N;
    Inform *M = new Inform[N];
    GetData(M, N);
    fostream out("file.txt");
    StoreData(out,M, N);
    out.close();
    int v=111;
    DeleteElem(v,M,N);
    ShowData(M, N); 
    delete [] M;
    system("PAUSE");
    return 0;
}
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
08.02.2014, 12:12  [ТС]     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #5
fostream out("file.txt");
Эта строка не работает, ошибку выдает.
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
08.02.2014, 16:14     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Bubbles Посмотреть сообщение
ошибку выдает.
#include <fstream>
подключили?

Окончательный вариант
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
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
struct Inform
{
   string name;
   int v;
   string autor;
   string nositel;
};
 
void ShowData(Inform *M, int N)
{
   for (int i = 0; i < N; i++)
    {
     cout << M[i].name << endl;
     cout << M[i].v << endl;
     cout << M[i].autor << endl;
     cout << M[i].nositel << endl;
     cout << endl;
    }
}
void GetData(Inform *M,int N)
{
    for (int i=0; i < N; i++)
    {
        cout << "NAZVANIE: "; cin >> M[i].name;
        
        cout << "OBIEM: "; cin >> M[i].v;
 
        cout << "AUTOR: "; cin >> M[i].autor;
        
        cout << "NOSITEL: "; cin >> M[i].nositel;
        cout << endl;
    }
}
void DeleteElem(int v0,Inform *M, int &N)
{
   for (int i = 0; i < N; i++)
    {
         if(M[i].v==v0)
         {
             for (int k = i; k < N-1; k++)//сдвиг всех элементов на один
             {
                M[k].name=M[k+1].name;
                M[k].v=M[k+1].v;
                M[k].autor=M[k+1].autor;
                M[k].nositel=M[k+1].nositel;
             }
             N--; // количество элементов уменьшилось
             i--; // надо снова проверить, что теперь на i-ом месте.
         }
    }
}
void StoreData(ofstream &out,Inform *M, int N)
{
   for (int i = 0; i < N; i++)
   {
     out << M[i].name << endl;
     out << M[i].v << endl;
     out << M[i].autor << endl;
     out << M[i].nositel << endl;
     out << endl;
   }
}
int main()
{
    int N; cout << "Vvedite  N: "; cin >> N;
    Inform *M = new Inform[N];
    GetData(M, N);
    ofstream out("file.txt");
    StoreData(out,M, N);
    out.close();
    int v=111;
    DeleteElem(v,M,N);
    ShowData(M, N); 
    delete [] M;
    system("PAUSE");
    return 0;
}
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
09.02.2014, 16:29  [ТС]     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #7
Все работает, спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2016, 19:41     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
Еще ссылки по теме:
Удалить элементы с заданным значением, добавить перед каждым четным элементом 0 C++
Перед элементом массива с порядковым номером K вставить новый элемент C++
Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением C++
C++ Вставить в вектор новый элемент перед элементом с заданным индексом
C++ Из массива удалить элемент с заданным номером

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

Или воспользуйтесь поиском по форуму:
Светлана Слонь
0 / 0 / 0
Регистрация: 21.11.2015
Сообщений: 208
07.02.2016, 19:41     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером #8
а откуда v0? чему оно равняется?
Цитата Сообщение от zss Посмотреть сообщение
void DeleteElem(int v0,Inform *M, int &N)
{
* *for (int i = 0; i < N; i++)
* * {
* * * * *if(M[i].v==v0)
Yandex
Объявления
07.02.2016, 19:41     Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
Ответ Создать тему
Опции темы

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