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

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

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

Массив структур. Фун-я удаления и поиска. - C++

03.05.2011, 21:41. Просмотров 596. Ответов 8
Метки нет (Все метки)

Первый курс. Решили над нами сделать эксперимент и дали нам курсовую. В принципе ничего сложного абсолютно, подобное задание в первом семестре но на паскале я делал. А вот с С++ не получается

Создать массив структур (записей), содержащих следующие поля:
- номер поезда;
- название пункта отправления и назначения;
- время отправления.

Предусмотреть в программе следующие действия:
а) упорядочивание записей по времени отправления поезда;
б) вывод на экран информации о поездах, направляющихся из пункта "Одесса" в пункт, название которого введено с клавиатуры (если таких поездов нет, выдать на экран соответствующее сообщение).
в) удаление поездов, которые отправляются позже заданного времени.
___________________________________________________________________________________

Не получается сделать задание Б и В (с заданием В уже столько всего перепробовал...)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "stdafx.h"
#include <iostream> 
#include <string>
using namespace std;
 
const int slen = 29;
struct rasp                 //rasp - имя нового типа
{
    int num;
    char town1[slen];
    char town2[slen];
    float time;
};
 
int scan (rasp r[], int n)   //Функция ввода
{
    int i=0;
    for (i=0; i<n; i++)
    {
        cout<<"Введи номер поезда: ";
        cin>>r[i].num;
        cout<<"Введи пункт отправления: ";
        cin>>r[i].town1;
        cout<<"Введи пункт назначения: ";
        cin>>(r[i].town2);
        cout<<"Введи время отправления: ";
        cin>>r[i].time;         
    }
    
    return i;
}
 
void print (rasp r[], int n)    //Функция вывода
{
    int i=0;
    for (i=0; i<n; i++)
    {
    cout<<"Номер поезда: "<<r[i].num<<endl;
    cout<<"Пункт отправления: "<<r[i].town1<<endl;
    cout<<"Пункт назначения: "<<r[i].town2<<endl;
    cout<<"Время отправления: "<<r[i].time<<endl;
    }
}
 
void func_a(rasp r[], int n) //Функция сортировки
{
    rasp tmp; int i, j=0;
    for (i = 0; i<n-1; i++)
         for (j=i+1; j<n; j++)
            if (r[i].time>r[j].time) 
            {
                tmp = r[i];
                r[i] = r[j];
                r[j] = tmp;        
                }
}
 
void func_b(rasp r[], int n) //Функция поиска
{
    char town[29]; int k=0;
    cout<<"Введи пукт назначения, который тебе нужен: "<<endl;
    cin>>town;
    for ( int i=0; i<n; i++)
        if (strstr (r[i].town2, town) && r[i].town1=="Одесса")
            {
                cout<<"Поезд <<Одесса-"<<town<<">>"<<" отправляется в "<<r[i].time<<"\t .Номер поезда: "<<r[i].num;
                k++;
        }
        if (k==0)
            cout<<"Нет поездов удовлетворяющих вашим условиям"<<endl;
    
}
 
void func_c( rasp r[], int n) //Функция удаления записи
{
}
 
int main()
{
    setlocale (LC_ALL, ".1251");
    system ("chcp 1251"); //переключаем консоль в кодировку win1251
    int n;
    cout << "Введите количество записей: ";    
    cin>>n;                 // n - число записей
    rasp * a = new rasp[n]; // rasp * a - указатель на структуру
    scan(a, n);
    cout<<endl;
    func_a (a, n);
    cout<<endl;
    func_b (a, n);
    cout<<endl;
    func_c (a, n);
    cout<<endl;
    print (a,n);
    cout<<endl;
    
    system("pause");
    
    return 0;
}
Добавлено через 3 часа 53 минуты
Функцию удаления уже сделал, через тип bool. Осталось только поиск.
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include "stdafx.h"
#include <iostream> 
#include <string>
using namespace std;
 
const int slen = 29;
struct rasp                 //rasp - имя нового типа
{
    int num;
    char town1[slen];
    char town2[slen];
    float time;
    bool del;
};
 
 
int scan (rasp r[], int n)   //Функция ввода
{
    int i=0;
    for (i=0; i<n; i++)
    {
        cout<<"Введи номер поезда: ";
        cin>>r[i].num;
        cout<<"Введи пункт отправления: ";
        cin>>r[i].town1;
        cout<<"Введи пункт назначения: ";
        cin>>(r[i].town2);
        cout<<"Введи время отправления: ";
        cin>>r[i].time; 
        r[i].del=false;
    }
    
    return i;
}
 
void print (rasp r[], int n)    //Функция вывода
{
    int i=0;
    for (i=0; i<n; i++)
    {
        if (r[i].del==true)
        break;  
    cout<<"Номер поезда: "<<r[i].num<<endl;
    cout<<"Пункт отправления: "<<r[i].town1<<endl;
    cout<<"Пункт назначения: "<<r[i].town2<<endl;
    cout<<"Время отправления: "<<r[i].time<<endl;
    }
}
 
void func_a(rasp r[], int n) //Функция сортировки
{
    rasp tmp; int i, j=0;
    for (i = 0; i<n-1; i++)
         for (j=i+1; j<n; j++)
            if (r[i].time>r[j].time) 
            {
                tmp = r[i];
                r[i] = r[j];
                r[j] = tmp;        
                }
}
 
void func_b(rasp r[], int n) //Функция поиска
{
    char town[29]; int k=0;
    cout<<"Введи пукт назначения, который тебе нужен: "<<endl;
    cin>>town;
    for ( int i=0; i<n; i++)
        if (strstr (r[i].town2, town) && r[i].town1=="Одесса")
            {
                cout<<"Поезд <<Одесса-"<<town<<">>"<<" отправляется в "<<r[i].time<<"\t .Номер поезда: "<<r[i].num;
                k++;
        }
        if (k==0)
            cout<<"Нет поездов удовлетворяющих вашим условиям"<<endl;
    
}
 
void func_c( rasp r[], int n) //Функция удаления записи
{
    float t=0.00;
    cout<<"Введи допустимое время: ";
    cin>>t;
    for (int i=0; i<n; i++)
        if (r[i].time>t) 
            r[i].del=true;
}
 
int main()
{
    setlocale (LC_ALL, ".1251");
    system ("chcp 1251"); //переключаем консоль в кодировку win1251
    int n;
    cout << "Введите количество записей: ";    
    cin>>n;                 // n - число записей
    rasp * a = new rasp[n]; // rasp * a - указатель на структуру
    scan(a, n);
    cout<<endl;
    func_a (a, n);
    cout<<endl;
    func_b (a, n);
    cout<<endl;
    func_c (a, n);
    cout<<endl;
    print (a,n);
    cout<<endl;
    
    system("pause");
    
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив структур. Фун-я удаления и поиска. (C++):

Блочная сортировка структур (Отсортировать массив структур по фамилии) - C++
Подскажите алгоритм блочной сортировки структур на языке С++. Мне нужно отсортировать массив структур по фамилии.

Массив структур, сохранение начала каждой из структур - C++
Я создал такую структуру class Lancuch { public: char cos; Lancuch * nastepny; }; Lancuch * poczatek=NULL; cin &gt;&gt;...

Программа удаления учреждений с указанным весом из массива структур с объединением - C++
Вот код #include &quot;stdafx.h&quot; #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; #include &lt;clocale&gt; #include &lt;conio.h&gt; ...

Написать программу удаления книги из массива структур с введенным именем автора - C++
Написать программу удаления книги из массива структур с введенным именем автора я ввожу массив структур, потом ищу совпадения с...

Написать программу удаления книги из массива структур с введенным именем автора - C++
Написать программу удаления книги из массива структур с введенным именем автора

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

8
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
04.05.2011, 00:00 #2
Здесь неправильно:
C++
1
r[i].town1=="Одесса"
Сравниваются адреса строк, но не сами строки.
Ну и кроме того, я бы обратил внимание на русский шрифт, на cin>> char* и прочая
1
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
04.05.2011, 01:39  [ТС] #3
Да. Если убрать условие r[i].town1=="Одесса" то работает, но мне это условие нужно, а как его написать по другому не знаю...
Насчет cin и cin.getline я знаю, но мне сейчас не это главное. Тем более, что когда я ставил cin.getline оно не так работало как надо (но такую мелочь могу и у препода спросить). С русским шрифтом все прекрасно вроде работает.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
04.05.2011, 01:44 #4
Хм, строки просто сравнивают
C++
1
strcmp (s1, s2)
1
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
04.05.2011, 02:17  [ТС] #5
все получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void func_b(rasp r[], int n) //Функция поиска
{
 char town[29]; int k=0; char s2[14]="Одесса";
 cout<<"Введи пукт назначения, который тебе нужен: "<<endl;
 cin>>town;
 for ( int i=0; i<n; i++) 
 {
     if (strstr (r[i].town2, town) && strstr(r[i].town1, s2) )
   {
    cout<<"Поезд <<Одесса-"<<town<<">>"<<" отправляется в "<<r[i].time<<"\t .Номер поезда: "<<r[i].num;
    k++;
   }
}
  if (k==0)
   cout<<"Нет поездов удовлетворяющих вашим условиям"<<endl;
 
}
Спасибо за совет насчет char

Добавлено через 18 минут
И последний очень глупый вопрос. Забыл (или нам не давали) как в С++ сделать, чтоб всегда оставалось два знака после запятой, а то помню в паскале было все просто (writeln(a:2:2)).
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
04.05.2011, 03:14 #6
C++
1
strstr(r[i].town1, "Одесса"
0
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
04.05.2011, 21:01  [ТС] #7
Так, а теперь как сделать чтоб числа (в данном случае время) выводились в формате 11.00, а еще лучше 11:00.

П.С.
printf("Время отправления: %2.2f \n ", r[i].time); - выводит в формате 11,00, а запятая мне там ой как не подходит.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
04.05.2011, 21:20 #8
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <math.h>
 
int main () {
 float x= 12.000345;
 printf ("x= %d:%.2d\n", (int)floor(x), (int)floor((x-floor(x))* 100));
 x= 12.345;
 printf ("x= %d:%.2d\n", (int)floor(x), (int)floor((x-floor(x))* 100));
 getchar ();
}
Наверное, можно и проще. Смотри функцию "printf" и математические функции
1
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
05.05.2011, 02:06  [ТС] #9
Спасибо, а то хотел уже делать так
C++
1
2
3
4
5
6
y=modf(r[i].time, &temp); //y=дробная часть, temp=целая часть
    y=y*100;
    if (y<10)
        cout<<temp<<':0'<<y;
    else
    cout<<temp<<':'<<y;
Но твой вариант более рациональный))
Я просто с printf, scanf раньше не работал, не было нужды)
0
05.05.2011, 02:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 02:06
Привет! Вот еще темы с ответами:

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

Обработка списков: функции удаления и поиска элемента - C++
Надо написать функцию Void del (int value) , которая удаляет элемент в списке и Elem *searth (int value) , что в списке ищет первый элемент...

Двусвязные списки: функции ввода, вывода, поиска и удаления - C++
Есть структура Element и блок управления Object Они находятся в list.h #pragma once struct Element ...

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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