Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
1

Структура.Найтиде ошибку

19.04.2009, 22:37. Показов 2032. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код. Он компилируется, работает, но с странностями.
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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
#define istr 21
struct train{
    int num;
    char naz[istr];
    char time[istr];
};
int pro1(int n,train *p,int num1);
int pro2(int n,train* p,char naz1[istr]);
void nom(int num1,train* p,int n);
void stan(int n,train* p,char naz1[istr]);
 
int main(int argc,char* argv[])
{
    setlocale(LC_ALL,".1251");
    int i,n,num1;
    char naz1[istr];
    cout << "Информацию о скольких поездов следует занести в базу данных?" << endl;
    cin >> n;
    train *p,*a;
    a = new train[n];
    p = &a[0];
    for(i = 0; i < n;i++){
        _flushall();
        cout << "Введите информацию о " << i+1 << " поезде." << endl;
        cout << "Введите номер поезда: №";
        cin >> p->num;_flushall();
        cout << "Введите станцию назначения поезда: ";
        cin.getline(p->naz,istr);
        cout << "Введите время оправления поезда: ";
        cin.getline(p->time,istr);
        p++;
    }
    cout << endl;
    cout << "Введите искомый номер поезда: ";
    cin >> num1;
    _flushall();
    cout << endl;
    p = &a[0];
    while (pro1(n,p,num1)){
        cout << "Поезд с номером №" << num1 << " не найден в базе данных." << endl;
        cout << "Введите новый искомый номер поезда: №";
        cin >> num1;
    }
    cout << "Поезд с номером №" << num1 << " найден в базе данных." << endl; 
    p = &a[0];
    nom(num1,p,n);
    cout << endl;
    _flushall();
    cout << "Введите искомую станцию назначения: ";
    cin.getline(naz1,istr);
    p = &a[0];
    while(pro2(n,p,naz1)){
        cout << naz1 << " - данная конечная станция не найдена в базе данных." << endl;
        cout << "Введите новую ускомую станцию назначения: ";
        cin.getline(naz1,istr);
    }
    cout << naz1 << " - станция назначения найдена в базе данных." << endl;
    p = &a[0];
    stan(n,p,naz1);
    delete[]a;
    system("PAUSE");
    return 0;
}
int pro1(int n,train *p,int num1){
    int i;
    for(i = 0; i < n;i++){
        if (num1 == p->num)
            return(0); else
            return(1);
        p++;
    }
}
int pro2(int n,train* p,char naz1[]){
    int i;
    for(i = 0; i < n;i++){
        if (stricmp(naz1,p->naz) == 0)
            return(0);else
            return(1);
        p++;
    }
}
void nom(int num1,train* p,int n){
    int i;
    for(i = 0; i < n;i++){
        if (num1 == p->num){
            cout << "Поезд №" << num1 << " оправляется в " << p->time << endl;
            cout << "до станции " << p->naz << endl;
        }
        p++;
    }
}
void stan(int n,train* p, char naz1[]){
    int i;
    for(i = 0;i < n;i++){
        if (stricmp(naz1,p->naz) == 0){
            cout << "До станции " << p->naz << " следует: " << endl;
            cout << "Поезд №" << p->num << endl;
            cout << "в " << p->time << endl;
        }
        p++;
    }
}
А вот работа программы.
Структура.Найтиде ошибку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2009, 22:37
Ответы с готовыми решениями:

исправить ошибку в коде с++(структура данных)
определить структурный тип,содержащий следующую информацию: фио риелтора,тип квартиры,кол-во...

Структура (найти ошибку в этом коде)
Добрый день. Возникла такая проблема, не могу найти ошибку в этом коде, выводит непонятные символы....

Найти и исправить ошибку в программе (структура Student)
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; typedef struct TStudent { char...

Структура Octal. Выдает ошибку E2040 Declaration terminated incorrectly. Не пойму в чем проблема?
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; struct Octal {char*s;int len;} ...

21
67 / 67 / 24
Регистрация: 21.11.2008
Сообщений: 226
19.04.2009, 22:39 2
и в чем проявляются странности?
0
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
19.04.2009, 23:13  [ТС] 3
Вот условие задачи:
(Автоматизированная информационная система на жд вокзале содержит инфо о отправлении поездов.
Для каждого поезда указывается:
· номер поезда;
· станция назначения;
· время отправления.
Данные в информационной системе организованы в виде линейного списка.!!!!!

Составить программу, которая:
· обеспечивает первоначальный ввод данных в информационную систему и формирование линейного списка;
· производит вывод всего списка;
· вводит номер поезда и выводит все данные об этом поезде;
· вводит название станции назначения и выводит данные обо всех поездах, следующих до этой станции.
Походу сам код неправильно написан. На рис. там видно, что неправильно ищет номер и станцию.
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
19.04.2009, 23:24 4
Код
int pro1(int n,train *p,int num1){
        int i;
        for(i = 0; i < n;i++){
                if (num1 == p->num)
                        return(0); else
                        return(1);
                p++;
        }
Если искомый номер находится не в 0-й ячейке, то при таком условии он не будет найден никогда. Надо:
C
1
2
3
4
5
6
7
8
9
10
int pro1(int n, train *p, int num1)
{
   int i;
   for(i = 0; i < n; i++) {
      if(num1 == p->num)
         return 0;
      p++;
   }
   return 1;
}
В поиске станции у тебя аналогичная ошибка.
1
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
19.04.2009, 23:33 5
См. строки 72-74. На первой же итерации цикла у тебя будет выход из процедуры. Ветку else надо удалить, а Return 1 влепить в конец процедуры. Аналогично строки 80-82

Добавлено через 33 секунды
Упс... опередели
1
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 01:53  [ТС] 6
Ещё вопрос, а можно как-то вернутся к моменту задания первого вопроса в коде(строка 53) без использования цикла, ну не совсем без цикла,чтобы цикл только спрашивал и переправлял на 53 строчку?
0
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 02:20 7
Цитата Сообщение от insolent Посмотреть сообщение
Ещё вопрос, а можно как-то вернутся к моменту задания первого вопроса в коде(строка 53) без использования цикла, ну не совсем без цикла,чтобы цикл только спрашивал и переправлял на 53 строчку?
Обычно кусок кода, который нужно повторять обрамляется в while(1) { ... } и если пользователь вводит спец. команду, например "exit", то делается break;
0
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 02:30  [ТС] 8
Цитата Сообщение от KoppeKTop Посмотреть сообщение
Обычно кусок кода, который нужно повторять обрамляется в while(1) { ... } и если пользователь вводит спец. команду, например "exit", то делается break;
Это я знал, а как сделать, как я выше писал?
0
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 02:42 9
Цитата Сообщение от insolent Посмотреть сообщение
чтобы цикл только спрашивал
Что спрашивал?
Цитата Сообщение от insolent Посмотреть сообщение
и переправлял на 53 строчку?
см. goto.
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
20.04.2009, 04:46 10
Цитата Сообщение от KoppeKTop Посмотреть сообщение
см. goto.
А может не надо?.
0
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 11:04  [ТС] 11
Ой, не цикл,а условие( типо "Хочете повторить поиск поезда?), если да - то назад к 53-й строчки, а если нет - exit(1).
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
20.04.2009, 13:38 12
Лучше сделать свитч с кейсами: 1 - поиск номера, 2 - поиск станции, и зациклить его, пока не нажмем, скажем, 0.
0
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 17:17 13
Цитата Сообщение от ISergey Посмотреть сообщение
А может не надо?.
Конечно не надо! goto нужно использовать только в крайних случаях, а здесь без него спокойно можно обойтись.
А есть ещё варианты, как организовать переход к определенному месту кода НЕ используя цикла?

Цитата Сообщение от Gravity Посмотреть сообщение
Лучше сделать свитч с кейсами: 1 - поиск номера, 2 - поиск станции, и зациклить его, пока не нажмем, скажем, 0.
Это я уже писал, на это получил ответ:
Цитата Сообщение от insolent Посмотреть сообщение
Это я знал, а как сделать, как я выше писал?
Мы ведь не ищем лёгких путей

insolent, goto - это плохой стиль программирования, ведущий к образованию сложночитаемого и малопонятного спагетти-кода. В таких случаях принято пользоваться связкой while (1) { Проверка ввода пользователя + действия }.
0
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 17:31  [ТС] 14
Понятно. Значит только через цикл.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.04.2009, 20:35 15
Цитата Сообщение от KoppeKTop Посмотреть сообщение
insolent, goto - это плохой стиль программирования, ведущий к образованию сложночитаемого и малопонятного спагетти-кода. В таких случаях принято пользоваться связкой while (1) { Проверка ввода пользователя + действия }.
Это большой вопрос. Слишком частое использование goto конечно превращает программу в бесконечную плохо понимаемую кишку, но вот конкретно в данном случая я бы порекомендовал человеку использовать goto. Просто по причине того, что у него (как видно из программы) ещё небольшой опыт в программировании и попытка сделать через цикл лишь приведёт к тому, что он ещё больше запутается в собственной программе. А использование goto в данном случае не повлечёт за собой никаких сложных дополнительных конструкций и с точки зрения понимания будет проще, чем использование цикла и ещё каких-либо семиэтажных наворотов. При условии, что это будет единственный goto в программе. Если их станет 2-3 и более, то программа почти наверняка станет плохопонимаемой
1
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 20:58 16
Цитата Сообщение от Evg Посмотреть сообщение
использование цикла и ещё каких-либо семиэтажных наворотов.
Я в программе вижу наличие не одного и не двух циклов. Причем как for, так и while. Поэтому не вижу у человека проблем с циклами (если код писал он).
Использование while(true) {} увеличит длину кода на 2 строчки (из-за скобок) и добавит 1 отступ к коду. Все условия можно оставить теми же, просто вместо if ("Yes") goto label53string; будет if ("No") break; Поэтому не вижу ничего "семиэтажного" в циклах.

Я думаю, что insolent сам определится с тем, что ему использовать.

Не по теме:

Evg, использование goto - тема широкая и почти холиварная, я прекрасно представляю себе несколько use cases, где goto - это правильно. Предлагаю не оффтопить в этом треде.

1
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 21:26  [ТС] 17
Спасибо за советы.
Цитата Сообщение от KoppeKTop Посмотреть сообщение
если код писал он
Код я сам писал, хоть и опыта маловато(только классы штурмую), нужно же все на практике закреплять. Я знал, что goto нежелательно использовать, но нужно со всем ознакомится. Я попробую и цикл, и goto, а в дальнейшем буду избегать использовать goto.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.04.2009, 21:36 18
Цитата Сообщение от KoppeKTop Посмотреть сообщение
Использование while(true) {} увеличит длину кода на 2 строчки (из-за скобок) и добавит 1 отступ к коду. Все условия можно оставить теми же, просто вместо if ("Yes") goto label53string; будет if ("No") break; Поэтому не вижу ничего "семиэтажного" в циклах.
Это ты смотришь с позиции "профессионала" (скажем так). С позиции новичка это всё не так просто понять.

Добавлено через 5 минут 10 секунд
Цитата Сообщение от insolent Посмотреть сообщение
Я попробую и цикл, и goto
Это правильная позиция. Надо попробовать все способы на практике и выбрать то, что на твой взгляд более приемлимо в данной ситуации

Цитата Сообщение от insolent Посмотреть сообщение
а в дальнейшем буду избегать использовать goto.
Надо его избегать там, где от него можно избавиться простым и понятным сособом. Когда ради того, чтобы избежать goto начинается уродование программной логики (типо перестановки ветвей if'а, замудрённые условия выхода из многократно вложенных циклов, разбавленные несколькими break'ами) - это неправильный подход. Если человек утверждает, что "структурное программирование" и "программирование без goto" - это одно и тоже, то на мой взгляд этот человек не программист, а, извиняюсь за выражение, теоретик. Однако я никому своё мнение не навязываю.
0
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 21:52 19
Цитата Сообщение от insolent Посмотреть сообщение
нужно со всем ознакомится.
Вот с этим полностью согласен!
0
829 / 352 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 22:55  [ТС] 20
А чем ещё можно заменит goto в С++, кроме циклов?
0
20.04.2009, 22:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2009, 22:55
Помогаю со студенческими работами здесь

Почему реализованная структура при использовании выдает ошибку?
Доброго времени суток, уважаемые форумчане! Написал программу моделирующую работу светофора, но...

В текстовом файле структура – информация о компьютерах. Структура с полями: название, стоимость.
Ребят, помогите пожалуйста, 29 июня экзамен по &quot;Основы программирования&quot;,кто сколько сможет сделать...

Структура «База», сущности «Универсам» и «Продукты», структура «Товар»
1. Создать структуру «База», включающую не менее 3 полей. 2. Создать сущности «Универсам» и...

структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ
структура array предназначена для хранения строки типа char. Структура имеет функцию, которая...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru