Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические структуры, ошибки 
:(
    Опции темы
shokky
Дата 22.4.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Всем доброго времени суток...
у меня к вам огромная просьба....вы не могли бы посмотреть есть ли в программе ошибки?....
в программе решается такая задача:
Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке.
Сведения о каждом автобусе содержат:
•    номер автобуса;
•    фамилию и инициалы водителя;
•    номер маршрута;
•    признак того, где находится автобус — на маршруте или в парке.
 Программа должна обеспечивать:
•    начальное формирование данных о всех автобусах в виде списка;
•    при выезде каждого автобуса из парка вводится номер автобуса, и программа устанавливает значение признака «автобус на маршруте»;
•    при въезде каждого автобуса в парк вводится номер автобуса, и программа устанавливает значение признака «автобус в парке»;
•    по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.

вот код:
Код

#include <string.h>
#include <dos.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>



struct bus
{
    char FIO_voditel[ 50 ];
    int bus_number, route_number, viezd, zaezd;
    struct bus *even;
    };

struct bus *next;
struct bus *start=NULL;
struct bus *end=NULL;

int size=0;


void index( int index )
{
next=start;
for( int i=0; next; ++i )
{
    if( i==index ) break;
    next=next->even;
    }
return;
}

void addtail( bus &X ) //функция добавления в список одной структуры
{
++size;
next=( bus * ) malloc ( sizeof(bus) );
memcpy( next, &X, sizeof(bus) );
if( start==NULL && end==NULL )  start=next;
else end->even=next;
end=next;
end->even=NULL;
return;
}

void filled()
{
randomize();
char opt[ 10 ];
struct bus X;

clrscr();
cout << setw( 10 ) << "Naberite EXIT dlai prekrasheniai vvoda dannih" << endl;
cout << "Vvedite dannie --" << setw( 10 ) << size+1 << endl
     << "Familia i iniciali voditelaiя: ";
cin.get( X.FIO_voditel , 100 );

if( strlen(X.FIO_voditel)==0 || stricmp(X.FIO_voditel, "exit")==0 ) return;

cout << "Nomer avtobusa i nomer reisa cherez probel: ";
cin >> X.bus_number >> X.route_number;
cin.ignore();

for( ;((X.viezd=random( 24 ))>=(X.zaezd=random( 24 ))); );

addtail( X );

memset( &X, 0, sizeof(bus) );

filled(); // рекурсия

}





void main( void )
{
int i, j, c;
struct time t;
gettime( &t );

filled(); //заполняем список

for( ; c!=3; )
{
    clrscr();
    cout << "[ 1 ] V parke" << endl
     << "[ 2 ] Na linii" << endl
     << "[ 3 ] Bihod" << endl
     << "Vvedite 1,2,3 : ";
    cin >> c;


    switch( c )
    {
    case 1:
        cout << "V parke v dannii moment: " << endl;
        for( j=0,i=0; i<size; ++i )
        {
        index( i );
        if( next->viezd>t.ti_hour || next->zaezd<t.ti_hour )
        {
            cout << "Nomer avtobusa: " << next->bus_number << endl
             << "Nomer reisa: " << next->route_number << endl
             << "Voditel': " << next->FIO_voditel << endl
             << "------------------------------------" << endl;
            ++j;
            }
        }
        cout << "Itogo: " << j << " iz " << size << endl
         << "Nagmite lybyu klavishy dlai prodolgeniaя " << endl;
        getch();
    break;
    case 2:
        cout << "Na linii v dannii moment: " << endl;
        for( j=0,i=0; i<size; ++i )
        {
        index( i );
        if( next->viezd<t.ti_hour && next->zaezd>t.ti_hour )
        {
            cout << "Nomer avtobusa: " << next->bus_number << endl
             << "Nomer reisa: " << next->route_number << endl
             << "Voditel': " << next->FIO_voditel << endl
             << "------------------------------------" << endl;
            ++j;
            }
        }
        cout << "Itogo: " << j << " iz " << size << endl
         << "Nagmite lybyu klavishy dlai prodolgeniaя " << endl;
        getch();
    break;
    default:
        if( c>3 ) cout << "Nevernii vvod!" << endl;
    break;
    }
    }

return;
}


тут вроде бы память от списка не освобождается .... ну я не знаю как это надо сделать smile ...и еще тут почему-то куда то пропадает один из введенных автобусов - он не распределяется ни в парк, ни на линию smile ...
помогите разобраться пожалуйста smile 
PM MAIL   Вверх
powerfox
Дата 22.4.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Я недавно писал такую же на паскале smile
Какая ересь, так на С++ писать нельзя, какой-то дикий Си с потоками. Используй вектор.
По поводу вывода на экран и записи/чтения с файла: могу кинуть паскалевский код, переписать будет несложно.




--------------------
user posted image
PM WWW   Вверх
shokky
Дата 22.4.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



powerfox, вы понимаете у меня такой учебный компилятор ....он вынуждает так "дико" писать smile 
PM MAIL   Вверх
powerfox
Дата 22.4.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Цитата(shokky @  22.4.2007,  17:49 Найти цитируемый пост)
powerfox, вы понимаете у меня такой учебный компилятор ....он вынуждает так "дико" писать

Это ещё почему? Вы уверены? Если это С++ компилятор, а хедеры и код свидетельствуют об этом, то стандарт он поддерживает - 100 %.


--------------------
user posted image
PM WWW   Вверх
NightmareZ
Дата 22.4.2007, 18:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(powerfox @  22.4.2007,  18:06 Найти цитируемый пост)
Это ещё почему? Вы уверены? Если это С++ компилятор, а хедеры и код свидетельствуют об этом, то стандарт он поддерживает - 100 %.

Код

<dos.h>

....боюсь предположить, что за стандарт он поддерживает  smile 


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
apook
Дата 22.4.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Цитата

и еще тут почему-то куда то пропадает один из введенных автобусов - он не распределяется ни в парк, ни на линию

Он уезжает на лево.
Цитата

Используй вектор

Тот компилятор вектор не поддерживает


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
JackYF
Дата 23.4.2007, 16:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(NightmareZ @  22.4.2007,  18:10 Найти цитируемый пост)
....боюсь предположить, что за стандарт он поддерживает  smile  


Цитата(apook @  22.4.2007,  18:30 Найти цитируемый пост)
Тот компилятор вектор не поддерживает 


Угадаю или нет - Borland C++ 3.1?
В таком случае - стандарт 88-90 года прошлого века smile И о STL он знает не больше моей бабушки.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Daevaorn
Дата 23.4.2007, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(JackYF @  23.4.2007,  17:35 Найти цитируемый пост)
В таком случае - стандарт 88-90 года прошлого века 

если бы такой был
PM MAIL WWW   Вверх
JackYF
Дата 23.4.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Daevaorn @  23.4.2007,  17:08 Найти цитируемый пост)
если бы такой был 


Ну, у Борланда, видать, был smile Что-то же их компилер все-таки компилит smile



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 23.4.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Чтобы копилятор компилировал, надо чтобы существовал рабочий компилятор. Существование стандарта языка, код которого компилирует этот компилятор не является необходимым условием компиляции компилятором. 

Цитата(JackYF @  23.4.2007,  19:13 Найти цитируемый пост)
Что-то же их компилер все-таки компилит

Компилятор компилирует не стандарт языка, но код этого языка. Был язык, и был компилятор, и был код на этом языке. И компилировался этот код этим компилятором.

ЗЫ Негласным стандартом можно считать ARM (ну или как там его...).


--------------------
PM MAIL ICQ Skype   Вверх
NightmareZ
Дата 23.4.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



А что, нельзя взять компилятор, поддерживающий язык стандарта ANSI/ISO?

Это сообщение отредактировал(а) NightmareZ - 23.4.2007, 23:01


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Любитель
Дата 23.4.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



По-видимому, нельзя, ибо преподы требуют сдавать на ентом.


--------------------
PM MAIL ICQ Skype   Вверх
apook
Дата 26.4.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 9
Всего: 23



Код

#include <string.h>
#include <dos.h>
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>


struct time t;

struct bus
{
    char FIO_voditel[ 50 ];
    int bus_number, route_number, viezd, zaezd;
    struct bus *even;
    };

struct bus *next;
struct bus *start=NULL;
struct bus *end=NULL;

int size=0;


void index( int index )
{
next=start;
for( int i=0; next; ++i )
{
    if( i==index ) break;
    next=next->even;
    }
return;
}

void addtail( bus &X ) //функция добавления в список одной структуры
{
++size;
next=( bus * ) malloc ( sizeof(bus) );
memcpy( next, &X, sizeof(bus) );
if( start==NULL && end==NULL )  start=next;
else end->even=next;
end=next;
end->even=NULL;
return;
}

void filled()
{
randomize();
char opt[ 10 ];
struct bus X;

clrscr();
cout << setw( 10 ) << "Наберите EXIT для прекращения ввода данных" << endl;
cout << "Введите данные --" << setw( 10 ) << size+1 << endl
     << "Фамилия и Инициалы водителя: ";
cin.get( X.FIO_voditel , 100 );

//cout << X.FIO_voditel;
//getch();

if( strlen(X.FIO_voditel)==0 || stricmp(X.FIO_voditel, "exit")==0 ) return;
    
cout << "Номер автобуса и номер рейса через пробел: ";
cin >> X.bus_number >> X.route_number;
cin.ignore();

for( ;((X.viezd=random( 24 ))>=(X.zaezd=random( 24 ))); );

addtail( X );

memset( &X, 0, sizeof(bus) );

filled(); // рекурсия
}



void printall( void )
{
int i;
gettime( &t );
cout << setw( 10 ) << "---Текущее время " << (int)t.ti_hour << "ч. ---" << endl;
for( i=0; i<size; ++i )
{
    index( i );
    cout << "Номер автобуса: " << next->bus_number << endl
         << "Время выезда на линию: " << next->viezd << "ч. Время заезда в гараж: " << next->zaezd << "ч.";

    if( next->viezd<(int)t.ti_hour && next->zaezd>(int)t.ti_hour )
         cout << setw( 5 ) << "\x1 Сейчас на линии";

    cout << endl << "Номер рейса: " << next->route_number << endl
         << "Водитель: " << next->FIO_voditel << endl
         << "------------------------------------" << endl;
    }
return;
}

void dellist( void )
{
int i;

for( i=size; i>=0; i-- )
{
    index( i );
    free( next );
    }
return;
}

void main( void )
{
int i, j, c;
gettime( &t );

filled(); //заполняем список

for( ; c!=4; )
{
    clrscr();
    cout << "[ 1 ] В парке" << endl
         << "[ 2 ] На линии" << endl
         << "[ 3 ] Все" << endl
         << "[ 4 ] Выход" << endl
         << "Введите 1,2,3,4 : ";
    cin >> c; 


    switch( c )
    {
        case 1:
            cout << "В парке на данный момент: " << endl;
            for( j=0,i=0; i<size; ++i )
            {
                index( i );
                if( (int)t.ti_hour<next->viezd || (int)t.ti_hour>=next->zaezd )
                {
                    cout << "Номер автобуса: " << next->bus_number << endl
                         << "Номер рейса: " << next->route_number << endl
                         << "Водитель: " << next->FIO_voditel << endl
                         << "------------------------------------" << endl;
                    ++j;
                    }
                }
            cout << "Итого: " << j << " из " << size << endl
                 << "Нажмите любую клавишу для продолжения " << endl;
            getch();
        break; 
        case 2:
            cout << "На линии в данный момент: " << endl;
            for( j=0,i=0; i<size; ++i )
            {
                index( i );
                if( (int)t.ti_hour>=next->viezd && (int)t.ti_hour<next->zaezd )
                {
                    cout << "Номер автобуса: " << next->bus_number << endl
                         << "Номер рейса: " << next->route_number << endl
                         << "Водитель: " << next->FIO_voditel << endl
                         << "------------------------------------" << endl;
                    ++j;
                    }
                }
            cout << "Итого: " << j << " из " << size << endl
                 << "Нажмите любую клавишу для продолжения " << endl;
            getch();
        break;
        case 3:
            printall();
            getch();
        break;

        default:
            if( c>4 ) cout << "Неверный ввод!" << endl;
        break;
        }
    }

dellist();
 
return;
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1139 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.