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

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

Восстановить пароль Регистрация
 
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
03.05.2011, 21:41     Массив структур. Фун-я удаления и поиска. #1
Первый курс. Решили над нами сделать эксперимент и дали нам курсовую. В принципе ничего сложного абсолютно, подобное задание в первом семестре но на паскале я делал. А вот с С++ не получается

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

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

Не получается сделать задание Б и В (с заданием В уже столько всего перепробовал...)
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2011, 21:41     Массив структур. Фун-я удаления и поиска.
Посмотрите здесь:

Написать программу удаления книги из массива структур с введенным именем автора C++
C++ Программа удаления учреждений с указанным весом из массива структур с объединением
Массив структур, сохранение начала каждой из структур C++
C++ Написать программу удаления книги из массива структур с введенным именем автора
Программа поиска и удаления кавычек в текстовом файле C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.05.2011, 00:00     Массив структур. Фун-я удаления и поиска. #2
Здесь неправильно:
C++
1
r[i].town1=="Одесса"
Сравниваются адреса строк, но не сами строки.
Ну и кроме того, я бы обратил внимание на русский шрифт, на cin>> char* и прочая
Soroka_D
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 10
04.05.2011, 01:39  [ТС]     Массив структур. Фун-я удаления и поиска. #3
Да. Если убрать условие r[i].town1=="Одесса" то работает, но мне это условие нужно, а как его написать по другому не знаю...
Насчет cin и cin.getline я знаю, но мне сейчас не это главное. Тем более, что когда я ставил cin.getline оно не так работало как надо (но такую мелочь могу и у препода спросить). С русским шрифтом все прекрасно вроде работает.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.05.2011, 01:44     Массив структур. Фун-я удаления и поиска. #4
Хм, строки просто сравнивают
C++
1
strcmp (s1, s2)
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)).
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.05.2011, 03:14     Массив структур. Фун-я удаления и поиска. #6
C++
1
strstr(r[i].town1, "Одесса"
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, а запятая мне там ой как не подходит.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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" и математические функции
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2011, 02:06     Массив структур. Фун-я удаления и поиска.
Еще ссылки по теме:

C++ Программа поиска в массиве структур, содержащих объединения
C++ Блочная сортировка структур (Отсортировать массив структур по фамилии)
C++ Удаления узла из бинарного дерева поиска

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

Или воспользуйтесь поиском по форуму:
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 раньше не работал, не было нужды)
Yandex
Объявления
05.05.2011, 02:06     Массив структур. Фун-я удаления и поиска.
Ответ Создать тему
Опции темы

Текущее время: 12:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru