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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Динамические структуры, наверное двусвязный список( 
:(
    Опции темы
shokky
Дата 13.4.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

так как сказано "начальное формирование данных о всех автобусах в виде списка" я попыталась передалать код который мне написал apook в теме про односвязные списки....

Код

#include<stdio.h>
#include<string.h>

#include<fcntl.h>
#include<io.h>
#include<sys\stat.h>

#include<stdlib.h>

enum bool{ false, true };

struct scan_info
{
    char FIO_voditel[ 50 ], bus_place[ 25 ];
    int bus_number, route_number;
};

bool checkavail( int handle )
{
if ( filelength(handle)==0 )
{
    printf( "Sperva nado vvesti dannie!\n" );
    system( "pause" );
    return false;
    }
return true;
}


int filled( int handle )
{
int i, size;
lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

for( i=0; i<size; ++i )
{
    system( "cls" );
    printf( " --- %d --- \n", i+1 );

    printf( "Nomer abtobusa : " );
    scanf( "%d", &data->bus_number );

    printf( "Familia i iniciali voditelaiя: " );
    fgets( data->FIO_voditel, 50, stdin );

    printf( "Nomer marshrutaя: " );
    scanf( "%d", &data->route_number );

    printf( "Gge naxoditsai abtobus (na marsrute / v parke) : " );
    fgets( data->bus_place, 25, stdin );

    write( handle, (void*)data, sizeof(scan_info) );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo !\n" );
system( "pause" );
free( data );
return 0;
}

int printall( int handle )
{
int size, i;
FILE *TXT;
TXT=fopen( ".\\USERDAT.TXT", "w+" );
if( !TXT)
{
    perror( "Error: " );
    return -1;
   }

lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

fseek( TXT, 0L, SEEK_SET );
for( i=0; i<size; ++i )
{
    read( handle, (void*)data, sizeof(scan_info) );

    fprintf( TXT, "Nomer avtobusa %s\n\
Familia i iniciali voditelai %d\n\
Nomer marshruta %d\n\
Gge naxoditsai abtobus (na marsrute / v parke)   %d\n\
---------------------\n", data->bus_number, data->FIO_voditel,
data->route_number, data->bus_place );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo!\n" );
system( "pause" );
free( data );
fclose( TXT );
return 0;
}

int printselect( int handle, int pos )
{
int size;
scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

FILE *TXT;
TXT=fopen( ".\\USERDAT.TXT", "w+" );
if( !TXT)
{
    perror( "Error: " );
    return -1;
   }

lseek( handle, 2+pos*sizeof(scan_info), SEEK_SET );
read( handle, (void*)data, sizeof(scan_info) );

fprintf( TXT, "Nomer avtobusa %s\n\
Familia i iniciali voditelai %d\n\
Nomer marshruta %d\n\
Gge naxoditsai abtobus (na marsrute / v parke)   %d\n\
---------------------\n", data->bus_number, data->FIO_voditel,
data->route_number, data->bus_place );

printf( "Gotovo!\n" );
system( "pause" );
free( data );
fclose( TXT );
return 0;
}



int replaceselect( int handle, int pos )
{
int size;
scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

lseek( handle, 2+pos*sizeof(scan_info), SEEK_SET );

system( "cls" );
printf( " Menaiem %d --- \n", pos+1 );

printf( "Nomer avtobusa : " );
scanf( "%d", &data->bus_number );

printf( "Familia i iniciali voditelaiя: " );
fgets( data->FIO_voditel, 50, stdin );

printf( "Nomer marshrutaя: " );
scanf( "%d", &data->route_number );

printf( "Gge naxoditsai abtobus (na marsrute / v parke) : " );
fgets( data->bus_place, 25, stdin );

write( handle, (void*)data, sizeof(scan_info) );

printf( "Gotovo !\n" );
system( "pause" );
free( data );
return 0;
}


void main(void)
{
int handle, i, j, size=0, pos;


handle=open( ".\\DUMMY.DAT", O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE );
if( handle==-1 )
{
    perror( "Error: " );
    return;
   }

for( i=0; i!=5 ; )
{
    system( "cls" );
    printf( "\n\nDeistviaя:\n\
1. Zapolnit struktyrs\n\
2. Vivesti vse v fail dlai chtenia\n\
3. Vivesti viborochno v fail dlai chtenia\n\
4. Zamenit\n\
5. Exit\n");
scanf( "%d", &i);

switch( i )
{
    case 1:

    for( ; size<=0 || size>20; )
    {
        system( "cls" );
        printf( "%s\nKolichestvo struktyr N gde( 0<N<20 ): ", ( size>20 || size<0 ) ? "Ошибка!" : ""  );
        scanf( "%d", &size );
        }

    lseek( handle, 0L, SEEK_SET );
    write( handle, (void*)&size, 2 );
    filled( handle );
    break;

    case 2:
    if ( checkavail(handle) ) printall( handle );
    break;

    case 3:
    if( checkavail(handle) )
    {
    for( pos=0; pos>size || pos<=0;  )
    {
        system( "cls" );
        printf( "%s\nVvedite nomer schitivaemoi struktyri N gde( 0<N<%d ): ", ( size>20 || size<0 ) ? "Ошибка!" : "",  size+1 );
        scanf( "%d", &pos );
        }
    printselect( handle, pos-1 );
    }
    break;

    case 4:
    if( checkavail(handle) )
    {
    for( pos=0; pos>size || pos<=0;  )
    {
        system( "cls" );
        printf( "%s\nVvedite nomer zamenaiemoi stryktyri N gde( 0<N<%d ): ", ( size>20 || size<0 ) ? "Ошибка!" : "",  size+1 );
        scanf( "%d", &pos );
        }
    replaceselect( handle, pos-1 );
    }
    break;
    }
}

close( handle );
return;
}

вот....а дальше никак ничего не получается smile ...помогите пожалуйста....

заранее всем очень благодарна smile 
PM MAIL   Вверх
GIK
Дата 15.4.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Личто я в твоем коде увидел почти все кроме list smile Копатся в чужом коде ох как нехочется, так что я написал свой smile Програмулька позволяет вводить данные о автобусах, и получать ответ на запросы. 

Код

#include<stdio.h>
#include<string.h>

#include<fcntl.h>
#include<io.h>
#include<sys\stat.h>

#include<stdlib.h>
#include<cstdio.h>
#include<list.h>
#include<conio.h>
#include<iostream.h>


 using namespace std;


struct scan_info
{
    char FIO_voditel[ 50 ];  
    int where;  
    int bus_number;     
    int route_number;  
};

void datainput(list<scan_info> &list_SF){
 cout<<"Enter data:"<<endl;
 cout<<"Enter 0 for the ending:" <<endl;
 int i=1;
  while (i!=0){
   scan_info ran;
   cout<<"FIO:";
   cin >> ran.FIO_voditel;
   cout<<"Where is, 0-â garage, 1- on a route:";
   cin >> ran.where;
   cout<<" Nomer Avtobusa:";
   cin >> ran.bus_number;
   cout<<" Nomer Marshruta:";
   cin >> ran.route_number;

    list_SF.push_back(ran);
  cout<<"To continue? 1-YES, 0- NO:";
  cin>>i;

  }
   system( "cls" );
 };
void departure_of_buses(list<scan_info> &list_SF){
  list<scan_info>:: iterator iter;
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which have gone away from garage:" <<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) { iter->where=1; yes=1; break; }
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present:"<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
  system( "cls" );
}
void entrance_of_buses(list<scan_info> &list_SF){
  list<scan_info>:: iterator iter;
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which entrance in to garage"<<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) {  iter->where=0; yes=1; break;}
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present: "<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
     system( "cls" );
};

void  buses_on_a_route_and_in_garage(list<scan_info> &list_SF, int yes){

  list<scan_info>:: iterator iter;
  iter = list_SF.begin();
  if(yes){
   cout<<"Enter numbers of buses which have gone away from garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }
      iter++;
    }
 }else{
  cout<<"Enter numbers of buses which have driven in garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(!iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is in garage"<<endl;
      }
      iter++;
    }
 }

  system( "cls" );
};

void inquiry_about_departure(list<scan_info> &list_SF){

  list<scan_info>:: iterator iter;
  iter = list_SF.begin();
   int j=1, i, ran, yes;


   while(j)
    { yes=0;
     cout<<"Enter number of the bus: ";
      for(iter=list_SF.begin(); iter!=list_SF.end(); iter++){
       cin>>ran; if(ran==iter->bus_number) {yes=1; break;}
      }

      if(!yes) {cout<<"Or the dispatcher has left from mind, or such bus is not present";}
      if(yes && iter->where) //Если такой автобус существует и если он на маршруте
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }else if(yes && !iter->where)  //Если такой автобус существует и если он в гараже
      {
       cout<<"The bus with number"<< iter->bus_number << " is in garage"<<endl;
      }

     system("cls");
     cout<<"To continue? 1-YES, 0- NO:";
     cin>>j;
    }


};




void main(void)
{

 typedef list<scan_info> list_SF;
 list_SF SF;
 list_SF:: iterator iter;


 datainput(SF) ;   //Данные о автобусах
 departure_of_buses(SF); //Ввод номекров автобусов которые выехали из гаража
 entrance_of_buses(SF);  //Ввод автобусов которые въехали в гараж
 buses_on_a_route_and_in_garage(SF, 1); //автобусы на маршруте
 buses_on_a_route_and_in_garage(SF, 0); //автобусы в гараже

 inquiry_about_departure(SF); //Çàïðîñ íà àâòîáóñû

 getch();
return;
}


Это сообщение отредактировал(а) GIK - 15.4.2007, 19:13


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
shokky
Дата 15.4.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GIK, спасибище тебе огромнейшее)))....только вот протестить я ее не могу(((....у меня же компилятор старинный какой-то там учебный....он у меня std и list.h вообще не знает smile  smile  smile 
PM MAIL   Вверх
GIK
Дата 15.4.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Ну тогда не знаю как тебе помочь smile
А что в товоем коде надо сделать? 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
shokky
Дата 15.4.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А что в товоем коде надо сделать? 

в моем коде....туда надо просто добавить вот то что ты написал....: departure_of_buses, entrance_of_buses, buses_on_a_route_and_in_garage, inquiry_about_departure....и правильно их всех вызвать.....

Добавлено @ 19:37
я вот тут добавила....вылезает 8 ошибок....но там они все одинаковые....посторяется 4 раза одни и те же две ошибки....и 4 предупреждения....
Код

#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<fcntl.h>
#include<io.h>
#include<sys\stat.h>

#include<stdlib.h>

enum bool{ false, true };

struct scan_info
{
    char FIO_voditel[ 50 ], bus_place[ 25 ];
    int bus_number, route_number;
};

bool checkavail( int handle )
{
if ( filelength(handle)==0 )
{
    printf( "Sperva nado vvesti dannie!\n" );
    system( "pause" );
    return false;
    }
return true;
}


int filled( int handle )
{
int i, size;
lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

for( i=0; i<size; ++i )
{
    system( "cls" );
    printf( " --- %d --- \n", i+1 );

    printf( "Nomer abtobusa : " );
    scanf( "%d", &data->bus_number );

    printf( "Familia i iniciali voditelaiя: " );
    fgets( data->FIO_voditel, 50, stdin );

    printf( "Nomer marshrutaя: " );
    scanf( "%d", &data->route_number );

    printf( "Gge naxoditsai abtobus (na marsrute / v parke) : " );
    fgets( data->bus_place, 25, stdin );

    write( handle, (void*)data, sizeof(scan_info) );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo !\n" );
system( "pause" );
free( data );
return 0;
}

int printall( int handle )
{
int size, i;
FILE *TXT;
TXT=fopen( ".\\USERDAT.TXT", "w+" );
if( !TXT)
{
    perror( "Error: " );
    return -1;
   }

lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

fseek( TXT, 0L, SEEK_SET );
for( i=0; i<size; ++i )
{
    read( handle, (void*)data, sizeof(scan_info) );

    fprintf( TXT, "Nomer avtobusa %s\n\
Familia i iniciali voditelai %d\n\
Nomer marshruta %d\n\
Gge naxoditsai abtobus (na marsrute / v parke)   %d\n\
---------------------\n", data->bus_number, data->FIO_voditel,
data->route_number, data->bus_place );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo!\n" );
system( "pause" );
free( data );
fclose( TXT );
return 0;
}

void departure_of_buses(int handle){
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which have gone away from garage:" <<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) { iter->where=1; yes=1; break; }
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present:"<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
  system( "cls" );
}
void entrance_of_buses(int handle){
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which entrance in to garage"<<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) {  iter->where=0; yes=1; break;}
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present: "<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
     system( "cls" );
};

void  buses_on_a_route_and_in_garage(int handle, int yes){

  iter = list_SF.begin();
  if(yes){
   cout<<"Enter numbers of buses which have gone away from garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }
      iter++;
    }
 }else{
  cout<<"Enter numbers of buses which have driven in garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(!iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is in garage"<<endl;
      }
      iter++;
    }
 }

  system( "cls" );
};

void inquiry_about_departure(int handle){

  iter = list_SF.begin();
   int j=1, i, ran, yes;


   while(j)
    { yes=0;
     cout<<"Enter number of the bus: ";
      for(iter=list_SF.begin(); iter!=list_SF.end(); iter++){
       cin>>ran; if(ran==iter->bus_number) {yes=1; break;}
      }

      if(!yes) {cout<<"Or the dispatcher has left from mind, or such bus is not present";}
      if(yes && iter->where) //Если такой автобус существует и если он на маршруте
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }else if(yes && !iter->where)  //Если такой автобус существует и если он в гараже
      {
       cout<<"The bus with number"<< iter->bus_number << " is in garage"<<endl;
      }

     system("cls");
     cout<<"To continue? 1-YES, 0- NO:";
     cin>>j;
    }


};



void main(void)
{
int handle, i, j, size=0, pos;


handle=open( ".\\DUMMY.DAT", O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE );
if( handle==-1 )
{
    perror( "Error: " );
    return;
   }

for( i=0; i!=5 ; )
{
    system( "cls" );
    printf( "\n\nDeistviaя:\n\
1. Zapolnit struktyrs\n\
2. Vivesti vse v fail dlai chtenia\n\
3. Vivesti viborochno v fail dlai chtenia\n\
4. Zamenit\n\
5. Exit\n");
scanf( "%d", &i);

switch( i )
{
    case 1:

    for( ; size<=0 || size>20; )
    {
        system( "cls" );
        printf( "%s\nKolichestvo struktyr N gde( 0<N<20 ): ", ( size>20 || size<0 ) ? "Ошибка!" : ""  );
        scanf( "%d", &size );
        }

    lseek( handle, 0L, SEEK_SET );
    write( handle, (void*)&size, 2 );
    filled( handle );
    break;

    case 2:
    if ( checkavail(handle) ) printall( handle );
    break;


}

close( handle );
return;
}
}


Добавлено @ 19:42
вернее вот так:
Код

#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<fcntl.h>
#include<io.h>
#include<sys\stat.h>

#include<stdlib.h>

enum bool{ false, true };

struct scan_info
{
    char FIO_voditel[ 50 ], bus_place[ 25 ];
    int bus_number, route_number;
};

bool checkavail( int handle )
{
if ( filelength(handle)==0 )
{
    printf( "Sperva nado vvesti dannie!\n" );
    system( "pause" );
    return false;
    }
return true;
}


int filled( int handle )
{
int i, size;
lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

for( i=0; i<size; ++i )
{
    system( "cls" );
    printf( " --- %d --- \n", i+1 );

    printf( "Nomer abtobusa : " );
    scanf( "%d", &data->bus_number );

    printf( "Familia i iniciali voditelaiя: " );
    fgets( data->FIO_voditel, 50, stdin );

    printf( "Nomer marshrutaя: " );
    scanf( "%d", &data->route_number );

    printf( "Gge naxoditsai abtobus (na marsrute / v parke) : " );
    fgets( data->bus_place, 25, stdin );

    write( handle, (void*)data, sizeof(scan_info) );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo !\n" );
system( "pause" );
free( data );
return 0;
}

int printall( int handle )
{
int size, i;
FILE *TXT;
TXT=fopen( ".\\USERDAT.TXT", "w+" );
if( !TXT)
{
    perror( "Error: " );
    return -1;
   }

lseek( handle, 0L, SEEK_SET );
read( handle, (void*)&size, 2 );

scan_info *data;
data=( scan_info * ) malloc ( sizeof(scan_info) );

fseek( TXT, 0L, SEEK_SET );
for( i=0; i<size; ++i )
{
    read( handle, (void*)data, sizeof(scan_info) );

    fprintf( TXT, "Nomer avtobusa %s\n\
Familia i iniciali voditelai %d\n\
Nomer marshruta %d\n\
Gge naxoditsai abtobus (na marsrute / v parke)   %d\n\
---------------------\n", data->bus_number, data->FIO_voditel,
data->route_number, data->bus_place );
    memset( data, 0, sizeof(scan_info) );
    }

printf( "Gotovo!\n" );
system( "pause" );
free( data );
fclose( TXT );
return 0;
}

void departure_of_buses(int handle){
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which have gone away from garage:" <<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) { iter->where=1; yes=1; break; }
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present:"<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
  system( "cls" );
}
void entrance_of_buses(int handle){
  iter = list_SF.begin();
  cout<<"Enter numbers of buses which entrance in to garage"<<endl;
  cout<<"Enter 0 for the ending:" <<endl;
  int i=1, ran_num_bus, j, yes;

  while (i!=0){
   yes=0; iter=list_SF.begin();
   cout<<"Number bus:";
   cin>>ran_num_bus;
   for(j=0; j<list_SF.size(); j++){
     if(ran_num_bus==iter->bus_number) {  iter->where=0; yes=1; break;}
     iter++;
   }
   if(!yes) cout<<"Or the dispatcher has left from mind, or such bus is not present: "<<endl;;
   cout<<"To continue? 1-YES, 0- NO:";
   cin>>i;
  }
     system( "cls" );
};

void  buses_on_a_route_and_in_garage(int handle, int yes){

  iter = list_SF.begin();
  if(yes){
   cout<<"Enter numbers of buses which have gone away from garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }
      iter++;
    }
 }else{
  cout<<"Enter numbers of buses which have driven in garage"<<endl;
   cout<<"Enter 0 for the ending:" <<endl;
   int j;

   for(j=0; j<list_SF.size(); j++)
    {
      if(!iter->where)
      {
       cout<<"The bus with number "<< iter->bus_number << " is in garage"<<endl;
      }
      iter++;
    }
 }

  system( "cls" );
};

void inquiry_about_departure(int handle){

  iter = list_SF.begin();
   int j=1, i, ran, yes;


   while(j)
    { yes=0;
     cout<<"Enter number of the bus: ";
      for(iter=list_SF.begin(); iter!=list_SF.end(); iter++){
       cin>>ran; if(ran==iter->bus_number) {yes=1; break;}
      }

      if(!yes) {cout<<"Or the dispatcher has left from mind, or such bus is not present";}
      if(yes && iter->where) //Если такой автобус существует и если он на маршруте
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }else if(yes && !iter->where)  //Если такой автобус существует и если он в гараже
      {
       cout<<"The bus with number"<< iter->bus_number << " is in garage"<<endl;
      }

     system("cls");
     cout<<"To continue? 1-YES, 0- NO:";
     cin>>j;
    }


};



void main(void)
{
int handle, i, j, size=0, pos;


handle=open( ".\\DUMMY.DAT", O_RDWR | O_BINARY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE );
if( handle==-1 )
{
    perror( "Error: " );
    return;
   }

for( i=0; i!=5 ; )
{
    system( "cls" );
    printf( "\n\nDeistviaя:\n\
1. Zapolnit struktyrs\n\
2. Vivesti vse v fail dlai chtenia i na ekran v tablice\n\
3. Rabota c viezdom i v'ezdom abtobusov\n\
4. Zaprosit dannie ob abtobuse\n\
5. Exit\n");
scanf( "%d", &i);

switch( i )
{
    case 1:

    for( ; size<=0 || size>20; )
    {
        system( "cls" );
        printf( "%s\nKolichestvo struktyr N gde( 0<N<20 ): ", ( size>20 || size<0 ) ? "Ошибка!" : ""  );
        scanf( "%d", &size );
        }

    lseek( handle, 0L, SEEK_SET );
    write( handle, (void*)&size, 2 );
    filled( handle );
    break;

    case 2:
    if ( checkavail(handle) ) printall( handle );
    break;

    case 3:
{
departure_of_buses( handle );
break;
}

    case 4:
{
buses_on_a_route_and_in_garage( handle );
break;
}

    case 5:
{
break;
}

}

close( handle );
return;
}
}


одинаковые ошибки вылезают в строчках типа : 
iter = list_SF.begin();

что с ними сделать?....как заменить?

Это сообщение отредактировал(а) shokky - 15.4.2007, 19:56
PM MAIL   Вверх
GIK
Дата 16.4.2007, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Цитата

одинаковые ошибки вылезают в строчках типа : 
iter = list_SF.begin();

iter который используется в моем коде - это итератор на список. (в твоем его нет)
list<scan_info>:: iterator iter; - так можно его определить, итератор на объекты с типом scan_info
iter = list_SF.begin(); - так передается итератор на начало списка
iter++ - перемещение итератора на один эллемент вперед
iter-- - перемещение итератора на один эллемент назад соответственно

Если твой компилер не поддерживает list, тогда возможно тебе следует создать обычный массив с типом scan_info, что-то типа:
 
Код

scan_info s_f[3];
for(int i=0; i<3; i++) {
 s_f[i] = (scan_info *) malloc(sizeof(scan_info));
}





--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
shokky
Дата 16.4.2007, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Если твой компилер не поддерживает list, тогда возможно тебе следует создать обычный массив с типом scan_info

а где его там создавать? во всех функциях? smile 

сегодня точно узнала у препода как нужно делать....он сказал что значение метки в парке или на маршруте не должно запрашиваться у пользователя...а должо определяться рандомом.....т.е. типа 1-выехал, 0-в парке... smile  smile  smile 
PM MAIL   Вверх
shokky
Дата 16.4.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а не могли бы вы посмотреть....я тут переделала опять немного....особенно вывод таблицы в case 2 ....я неправильно сделала, да?....а как тогда надо?

Код

#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<fcntl.h>
#include<io.h>
#include<sys\stat.h>
#include<stdlib.h>


struct bus_info
{
    char FIO_voditel[ 50 ], bus_place[ 25 ];
    int bus_number, route_number;
};

//tyt zapolnaiytsai vse dannie
int filled( )
{
int i, size;
bus_info *data;
data=( bus_info * ) malloc ( sizeof(bus_info) );

for( i=0; i<size; ++i )
{
    system( "cls" );
    printf( " --- %d --- \n", i+1 );

    printf( "Nomer abtobusa : " );
    scanf( "%d", &data->bus_number );

    printf( "Familia i iniciali voditelaiя: " );
    fgets( data->FIO_voditel, 50, stdin );

    printf( "Nomer marshrutaя: " );
    scanf( "%d", &data->route_number );

    memset( data, 0, sizeof(bus_info) );
    }
return 0;
}

//random opredelaiet gde seichas avtobus
void buses_on_a_rout_or_in_the_park( )
{
................
}

//tyt otvet na zapros ob odnom kakom to avtobuse
void inquiry_about_departure(){

  iter = list_SF.begin();
   int j=1, i, ran, yes;


   while(j)
    { yes=0;
     cout<<"Enter number of the bus: ";
      for(iter=list_SF.begin(); iter!=list_SF.end(); iter++){
       cin>>ran; if(ran==iter->bus_number) {yes=1; break;}
      }

      if(!yes) {cout<<"Or the dispatcher has left from mind, or such bus is not present";}
      if(yes && iter->where) //Если такой автобус существует и если он на маршруте
      {
       cout<<"The bus with number "<< iter->bus_number << " is on a route"<<endl;
      }else if(yes && !iter->where)  //Если такой автобус существует и если он в гараже
      {
       cout<<"The bus with number"<< iter->bus_number << " is in garage"<<endl;
      }

     system("cls");
     cout<<"To continue? 1-YES, 0- NO:";
     cin>>j;
    }


};



void main(void)
{
int i, j, size=0, pos;

for( i=0; i!=5 ; )
{
    system( "cls" );
    printf( "\n\nDeistviaя:\n\
1. Vvesti vse dannie ob avtobusah\n\
2. Vivesti vse dannie na ekran v tablice\n\
3. Rabota c viezdom i v'ezdom abtobusov\n\
4. Zaprosit dannie ob abtobuse\n\
5. Exit\n");
scanf( "%d", &i);

switch( i )
{
    case 1:

    for( ; size<=0 || size>20; )
    {
        system( "cls" );
        printf( "%s\nKolichestvo avtobusov N gde( 0<N<20 ): ", ( size>20 || size<0 ) ? "Ошибка!" : ""  );
        scanf( "%d", &size );
        filled();
        }
    break;

    case 2:
{
    cout << "Tablica dannih obo vseh abtobusah avtoparka: "
         <<"\n----------------------------------------------\n";
for( i=0, j=0; i<............; ++i )
       {
    cout << "Nomer abtobusa " << setw( 20 ) << bus_info[ i ].bus_number << endl
     << "Familia i iniciali voditelai " << setw( 18 ) << bus_info[ i ].FIO_voditel << endl
     << "Nomer marshruta " << setw( 13 ) << bus_info[ i ].route_number << endl;
    ++j;
    }
    cout << endl;
    }
    break;

    case 3:
{
buses_on_a_route_or_in_the_garage( );
cout << "Tablica dannih obo vseh abtobusah avtoparka s ychetom viezda i v'ezda avtobusov: "
         <<"\n----------------------------------------------\n";
for( i=0, j=0; i<............; ++i )
       {
    cout << "Nomer abtobusa " << setw( 20 ) << bus_info[ i ].bus_number << endl
     << "Familia i iniciali voditelai " << setw( 18 ) << bus_info[ i ].FIO_voditel << endl
     << "Nomer marshruta " << setw( 13 ) << bus_info[ i ].route_number << endl
     << "Mestonahogdenie avtobusa " << setw( 11 ) << bus_info[ i ].bus_place << endl

    ++j;
    }
    cout << endl;
break;
}

    case 4:
{
int m;
cout << "Vvedite nomer marshruta avtobusa, o kotorom zaprashivaytsai svedenia: ";
cin >> m;
inquiry_about_departure(m);
break;
}

}

return;
}
}


очень вам благодарна smile 

Это сообщение отредактировал(а) shokky - 16.4.2007, 19:40
PM MAIL   Вверх
apook
Дата 17.4.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А почему список двусвязный нужен?


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


Шустрый
*


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

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



apook, так я так думала до того как у препода спросила....а он сказал каким удобнее таким и делай....
PM MAIL   Вверх
apook
Дата 17.4.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

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

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 main( void )
{
int i, j, c;
struct time t;
gettime( &t );

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

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


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


Это сообщение отредактировал(а) Alexeis - 17.4.2007, 20:53


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


Шустрый
*


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

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



apook, самое большое в мире спасибо тебе smile ...все так здоровско работает  smile ...только у меня как всегда непонятки(((....ну саавсем чуть-чуть....объясни позаласта....

Цитата

struct bus *even;

этот указатель нам зачем?
он у нас используется в функции доступа к элементу....а как он работает?


Цитата

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

так определяем где сейчас автобус, да?...а почему именно 24.....и что значит этот цикл? smile 

Цитата

gettime( &t );

а это что? smile ....и зачем оно нам?

Цитата

if( next->viezd>t.ti_hour || next->zaezd<t.ti_hour )

??? smile 


заранее еще раз  smile  спасибки..... smile 
PM MAIL   Вверх
apook
Дата 18.4.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Код

struct bus *even;

этот указатель нам зачем?

этот указатель находящийся в структуре и отличает спискок от массив структур!
представь как это работает... т.е заполнив структуру следующим элементом списка будет
как бы вложенная эта-же самая структкра, заполняем вглубь напоминает рекурсию smile.
Отсюда все сложности с обращением. Единственное ради чего есть смысл мириться с неу
добствами в обращении это то что список не требует фиксированного размера, т.е не зная
заранее о том сколтько структур будет заполнено можно приступать к заполнению пр этом
все будет нормально, для каждого следующего эл-а списка выделяем память и так пока не
кончится оперативка компьютера....

Цитата

Код

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

так определяем где сейчас автобус, да?...а почему именно 24.....и что значит этот цикл?  

Этот кусок можно записать так:
Код

X.viezd=random( 24 );
X.zaezd=random( 24 );
if( X.viezd>=X.zaezd ) то что то сделать;

т.е если не правильно генерировал random(ведь время выезда не может быть блольше времени заезда)
то (вот вопрос? можно напр из программы выйти) а можно так но не красиво
Код

metka:
X.viezd=random( 24 );
X.zaezd=random( 24 );
if( X.viezd>=X.zaezd ) goto metka; // и по новой

Убиваем двух зайцев, проверяем на правильность и если нет заставляем выполняться до тех
пор пока не будет как надо.
Цитата

Код

gettime( &t );

а это что?  ....и зачем оно нам?

а это узнаем текущее время т.е которое сейчас...
Код

if( next->viezd>t.ti_hour || next->zaezd<t.ti_hour )

а вот здесь как раз сравниваем время и заезда выезда по графику с текущим и узнаем где
сейчас автобус!







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


Шустрый
*


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

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



ух ты smile ....оказывается так здорово придумал....я даже все поняла)))....спасибо за пояснения smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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