Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 01:19   #11
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Дошел только до этого:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream>
#include <time.h>
using namespace std;

struct Rec {
    int num;
    int fio;
    int mnum;
	Rec* pNext;
};
typedef Rec* PtrRec;

int ShowMenu(); // Функция показывающая меню (возвращает код выбранного пункта меню)
void Create_List();
void Print_List(); 
void Otpravl();
void VPark();


int ShowMenu()
{
    char ch = '\0';
    // рисуем меню
	puts("1 : Create list the Bus");
    puts("2 : Show list the Bus"); 
    puts("3 : To send the Bus on the path");
    puts("4 : To send the Bus in park");
	puts("5 : Exit");

    ch = getch(); // считываем выбор пользователя
    
    return atoi(&ch); // возвращаем код выбранного меню
}

int main()
{
	PtrRec spPark;
	PtrRec spMarsh;
   while (1) // выполняем в бесконечном цикле
   {  
      switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
      {  
	     case 1: Create_List(); break; // если 1, то создаём список автобусов
         case 2: Print_List(); break; // если 2, то смотрим список
         case 3: Otpravl(); break; // если 3, то отправляем автобусы на маршрут
		 case 4: VPark(); break; // если 4, то отправляем автобусы в парк
         case 5: return 0; // если 5 то выходим из программы
         default:  // если другая кнопка, ничего не делаем
              break;
      }
   }
}

void Create_List() // процедура создания списка автобусов
{
	PtrRec pAux;
	PtrRec pT;
	char ch = '\0';
	PtrRec pBegin;
	pBegin = new Rec;
	pBegin->pNext = 0;

	cout << endl << "Vvedite nomer avtobysa\n"; cin >> pBegin->num;
	cout << endl << "Vvedite Fio voditelya\n"; cin >> pBegin->fio;
	cout << endl << "Vvedite nomer marshruta\n"; cin >> pBegin->mnum;

	pAux = pBegin;
	cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
			ch = getch();
	
		while (ch == 'y')
		{
			pT = new Rec;
			pAux->pNext = pT;
			pT->pNext = 0;
			cout << endl << "Vvedite nomer avtobysa\n"; cin >> pT->num;
			cout << endl << "Vvedite Fio voditelya\n"; cin >> pT->fio;
			cout << endl << "Vvedite nomer marshruta\n"; cin >> pT->mnum;
		
			pAux = pT;
			cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
			ch = getch();
		}
		delete pBegin;
}

void Print_List() // процедура печати списка автобусов
{
	PtrRec pAux;
	
	PtrRec pBegin;
	pBegin = new Rec;
	pBegin->pNext = 0;

	pAux = pBegin;

	cout << endl << "Nomer avtobyca | Fio vodiLbl | Nomer marshruta\n";
	while (pAux != 0){
		cout << endl << pAux->num << " " << pAux->fio << " " << pAux->mnum;
		cout << endl << "----------------------------------\n";
		pAux = pAux->pNext;
	}
	delete pBegin;
}

void Otpravl () // процедура отправки автобуса на маршрут
{
	int nomer;

	PtrRec pLmarsh;
	pLmarsh = new Rec;
	pLmarsh->pNext = 0;

	PtrRec pLpark;
	pLpark = new Rec;
	pLpark->pNext = 0;

	PtrRec pAux,pT1,pT2;
	PtrRec pNext;

	cout << endl << "Vvedite nomer avtobyca dlya otpravki na marshrut: "; cin >> nomer;
	pAux = pLpark;

	while ((pAux != 0) && (pAux->num != nomer))
	{
		pAux = pAux->pNext;
	if (pAux == 0)
		cout << endl << "V parke Het avtobyca s takim nomerom!";
	else // удаляем автобус из парка и ставим его на маршрут
		{ 
			if (pAux = pLpark) pLpark = pAux->pNext;
			else 
			{
				pT1 = pLpark;
				while (pT1->pNext != pAux)
				{
					pT1 = pT1->pNext;
					pT1->pNext = pAux->pNext;
				}
					pAux->pNext = pLmarsh;
					pLmarsh = pAux;
			}	
	
		}
	}
	delete pLmarsh;
	delete pLpark;
}

void VPark() // процедура отправки автобуса в парк
{
	int nomer;

	PtrRec pLmarsh;
	pLmarsh = new Rec;
	pLmarsh->pNext = 0;

	PtrRec pLpark;
	pLpark = new Rec;
	pLpark->pNext = 0;

	PtrRec pNext;
	PtrRec pAux,pT1,pT2;

	cout << endl << "Vvedite nomer avtobyca dlya otpravki v park"; cin >> nomer;
	pAux = pLmarsh;

	while ((pAux != 0) && (pAux->mnum != nomer))
	{
		pAux = pAux->pNext;
		if (pAux = 0) 
			cout << endl << "V parke Het avtobyca s takim nomerom!";
		else // удаляем автобус из парка и ставим его на маршрут
		{
			if (pAux = pLmarsh) pLmarsh = pAux->pNext;
			else 
			{
				pT1 = pLmarsh;
				while (pT1->pNext != pAux)
				{
					pT1 = pT1->pNext;
					pT1->pNext = pAux->pNext;
				}
				pAux->pNext = pLpark;
				pLpark = pAux;
			}
		}
	}
	delete pLmarsh;
	delete pLpark;
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"

Последний раз редактировалось bpystep; 01.12.2009 в 02:15.
bpystep вне форума Ответить с цитированием
Старый 03.12.2009, 03:41   #12
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Ребят помогите найти ошибку!
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 03.12.2009, 18:15   #13
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от bpystep Посмотреть сообщение
Ребят помогите найти ошибку!
О, тут их много. Вероятно проще переписать заново. Одна из основных ошибок заключается в том, что у созданного списка нет "связи с внешним миром", как он создаётся в процедуре, так потом на него указатель и теряется, естественно не работает ничего... В общем нужно переделать логику программы, pBegin можно, например, глобально объявить и инициализировать его только в Create_List, или ещё какой другой вариант

Последний раз редактировалось netrino; 03.12.2009 в 19:43.
netrino вне форума Ответить с цитированием
Старый 04.12.2009, 16:20   #14
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Если я его инициализирую в Create_list то как это тогда лучше сделать, чтоб он был глобальным??
чтото вроде
Код:
void Create_List(PtrRec pBegin;) // процедура создания списка автобусов
{
	PtrRec pAux;
	PtrRec pT;
	char ch = '\0';

	pBegin = new Rec;
	pBegin->pNext = 0;

	cout << endl << "Vvedite nomer avtobysa\n"; cin >> pBegin->num;
	cout << endl << "Vvedite Fio voditelya\n"; cin >> pBegin->fio;
	cout << endl << "Vvedite nomer marshruta\n"; cin >> pBegin->mnum;

	pAux = pBegin;
	cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
			ch = getch();
	
		while (ch == 'y')
		{
			pT = new Rec;
			pAux->pNext = pT;
			pT->pNext = 0;
			cout << endl << "Vvedite nomer avtobysa\n"; cin >> pT->num;
			cout << endl << "Vvedite Fio voditelya\n"; cin >> pT->fio;
			cout << endl << "Vvedite nomer marshruta\n"; cin >> pT->mnum;
		
			pAux = pT;
			cout << endl << "Vvesti ewe avtobyc? (y-yes n-no)\n";
			ch = getch();
		} // удалил "delete pBegin"
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 04.12.2009, 16:52   #15
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Нет, то что в круглых скобках - это параметры и они также ограничены областью видимости ф-ции для которой существуют. В общем-то можно сделать примерно так, но передавать в ф-цию указатель на указатель на структуру, а саму структуру объявить ещё в main и передавать его в каждую использующую его ф-цию.
А можно объявить глобально. То есть вне контекста какой-либо функции, сразу после описания структуры:
Код:
#include <...>
struct Rec {
...
}
typedef Rec* PtrRec;
PtrRec pBegin = 0;

// Инициализируем pBegin новой структурой только в Create_List:
void Create_List()
{
    pBegin = new Rec; // Ни в одной другой ф-ции больше эта запись не должна встречаться
...
}
netrino вне форума Ответить с цитированием
Старый 07.12.2009, 16:07   #16
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

чтото я не понимаю тогда, как оно будет работать=(
автобусы то будут в структуре, а как их от туда вытянуть?
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 07.12.2009, 19:54   #17
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

да точно также как вы делали до этого, только вместо создание нового списка в каждой функции теперь надо использовать существующий список, указатель на первый элемент, которого, указан в pBegin.
netrino вне форума Ответить с цитированием
Старый 07.12.2009, 20:16   #18
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Хорошо, но он тогда записывает в структуру только один(первый) автобус, и извлекает его при печати=( а я вводил >1 !!!
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 07.12.2009, 20:44   #19
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

значит вы ошиблись где-то дальше... весь список должен строится из pBegin. то есть в функции Create_List вы пишите создание списка. ни в одной из остальных функций, ни одному из элементов, принадлежащих pBegin не нужно присваивать никаких значений. я видел у вас в ф-ции Print_List строки:
Код:
pBegin = new Rec;
pBegin->next = 0; // Зачем это? Строку выше мы уже обсуждали
в общем я бы посоветовал ещё раз пересмотреть свою программу и попытаться задуматься что же там происходит, прогоните программу в голове, а затем ещё раз, в отладчике. без понимания, со списками делов у вас не выйдет )
netrino вне форума Ответить с цитированием
Старый 07.12.2009, 21:09   #20
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

попробывал перебрать код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream>
#include <time.h>
using namespace std;

// Задание:
/*Вариант 1
Составить программу, которая содержит динамическую информацию о наличии автобусов в 
автобусном парке.
Сведения о каждом автобусе содержат:
* номер автобуса;
* фамилию и инициалы водителя;
* номер маршрута.
Программа должна обеспечивать:
* начальное формирование данных  о,  всех автобусах в парке в виде списка;
* при выезде каждого автобуса из парка вводится номер автобуса, и программа удаляет данные 
об этом автобусе из списка автобусов, находящихся в парке, и записывает эти данные в 
список автобусов, находящихся на маршруте;
* при въезде каждого автобуса в парк вводится номер автобуса, и программа удаляет данные об 
этом автобусе из списка автобусов, находящихся на маршруте, и записывает эти данные в 
список автобусов, находящихся в парке;
* по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, 
находящихся на маршруте.*/

struct Rec
{
  int nom;
  int fio;
  int nmar;
  Rec* pNext;
};
typedef Rec* PtrRec;
PtrRec pBegin

void Create_List()
{
 PtrRec pAux,pT;

 char ch;

 pBegin = new Rec;
 pBegin->pNext = 0;

 cout << endl <<"Vvedite nomer avtobysa:  "; cin >>pBegin->nom;
 cout << endl <<"Vvedite Fio voditelya:  "; cin >>pBegin->fio;
 cout << endl <<"Vvedite nomer marshruta:  "; cin >>pBegin->nmar;

 pAux=pBegin;

 cout << endl <<"Vvesti ewe avtobyc? (y-yes n-no) ";
 cout << endl <<"\n";
 ch = getch();

 while(ch == 'y') 
 {
	 pT = new Rec;
     pAux->pNext=pT;
     pT->pNext=NULL;

     cout << endl <<"Vvedite nomer avtobysa:  "; cin >>pT->nom;
	 cout << endl <<"Vvedite Fio voditelya:  "; cin >>pT->fio;
	 cout << endl <<"Vvedite nomer marshruta:  "; cin >>pT->nmar;
    
	 pAux=pT;

     cout << endl <<"Vvesti ewe avtobyc? (y-yes n-no)";
     ch = getch();
 }
}
void Print_List()
{ 
	PtrRec pAux;
	pAux = pBegin;

	cout << endl <<"Nomer avtobyca | Fio vodiLbl | Nomer marshruta\n";

	while(pAux != NULL) 
	{
		cout << endl <<pAux->nom,pAux->fio,pAux->nmar;
		cout << endl <<"----------------------------------\n";
		pAux=pAux->pNext;
	}
}

void Otpravl(PtrRec pLpark, PtrRec pLmarsh)
{
 int nomer;
 PtrRec pAux,pT1;

 cout << endl <<"Vvedite nomer avtobyca dlya otpravki na marshrut: "; cin >> nomer;

	pAux=pLpark;
	while((pAux!=NULL)&&(pAux->nom!=nomer)) 
	{
		pAux=pAux->pNext;
	}
 
	if(pAux = NULL)
	{
		cout << endl <<"V parke Het avtobyca s takim nomerom!";
	}
	else
	{
		if(pAux == pLpark) 
		{
			pLpark=pAux->pNext;
		}
		else
		{
			pT1=pLpark;
			while(pT1->pNext!=pAux) 
			{
				pT1=pT1->pNext;
			}
			pT1->pNext=pAux->pNext;
		}
		pAux->pNext=pLmarsh;
		pLmarsh=pAux;
	}
}

void VPark(PtrRec pLmarsh, PtrRec pLpark)
{
 int nomer;
 PtrRec pAux,pT1;

 cout << endl <<"Vvedite nomer avtobyca dlya otpravki na marshrut: "; cin >> nomer;

	pAux=pLmarsh;
	while((pAux!=NULL)&&(pAux->nom!=nomer)) 
	{
		pAux=pAux->pNext;
	}
 
	if(pAux = NULL)
	{
		cout << endl <<"V parke Het avtobyca s takim nomerom!";
	}
	else
	{
		if(pAux == pLmarsh) 
		{
			pLmarsh=pAux->pNext;
		}
		else
		{
			pT1=pLmarsh;
			while(pT1->pNext!=pAux) 
			{
				pT1=pT1->pNext;
			}
			pT1->pNext=pAux->pNext;
		}
		pAux->pNext=pLpark;
		pLpark=pAux;
	}
}

void Free_List(PtrRec pAux)
{
 if(pAux != NULL)
 {
   Free_List(pAux->pNext);
   if(pAux != NULL) 
   {
    delete pAux;
     pAux=NULL;
   }
 }
}

int ShowMenu()
{
    char ch = '\0';
    // рисуем меню
	cout << endl << "\n";
	puts("1 : Show list the Bus V parke");
    puts("2 : Show list the Bus Ha marshrute"); 
    puts("3 : To send the Bus on the marshrut");
    puts("4 : To send the Bus in park");
	puts("5 : Exit");

    ch = getch(); // считываем выбор пользователя
    
    return atoi(&ch); // возвращаем код выбранного меню
}
int main()
{
	PtrRec spPark, spMarsh;
 char ch;
 
 spPark=NULL;
 spMarsh=NULL;
 Create_List(spPark);
 
  while (1) // выполняем в бесконечном цикле
   {  
      switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
      {  
         case 1: Print_List(spPark); break; // если 2, то смотрим список в парке
		 case 2: Print_List(spMarsh); break; // если 2, то смотрим список на маршрутах
         case 3: Otpravl(spPark,spMarsh); break; // если 3, то отправляем автобусы на маршрут
		 case 4: VPark(spMarsh, spPark); break; // если 4, то отправляем автобусы в парк
         case 5: return 0; // если 5 то выходим из программы
         default:  // если другая кнопка, ничего не делаем
              break;
      }
   }
 
 Free_List(spPark);
 Free_List(spMarsh);
}
я так понял что при создании структуры автобусов они записываются в "никуда", а надо чтобы они прописывались в парк, как этого добиться? или я не прав?
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"

Последний раз редактировалось bpystep; 07.12.2009 в 21:16.
bpystep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамика. Выручайте Sined121 Паскаль, Turbo Pascal, PascalABC.NET 3 06.05.2009 10:30
pascal динамика world12_tk Паскаль, Turbo Pascal, PascalABC.NET 0 19.04.2009 23:18
Динамика pascal bpystep Фриланс 3 02.04.2009 17:15
Динамика Pascal bpystep Помощь студентам 1 31.03.2009 19:39