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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2009, 21:23   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию C++. Динамика.

Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream>
#include <time.h>
using namespace std;

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

type 
	PtrRec = ^Rec; 
    PtrRec pNext;    //Указатель на список
struct 
{
	Rec; //список
	string nom;
	string fio;
	int nmar;
}

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


int ShowMenu()
{
	PtrRec spPark,spMarsh;
    char ch = '\0';
    // рисуем меню
    puts("1 : Show list the Bus in the park"); 
    puts("2 : Show list the Bus in route");
    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,spMarsh;
   while (1) // выполняем в бесконечном цикле
   {  
      switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
      {  
         case 1: Print_List(spPark); break; // если 1, то смотрим список автобусов в парке
         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; // если 4 то выходим из программы
         default:  // если другая кнопка, ничего не делаем
              break;
      }
   }
}

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

		New(pBegin);
		pBegin^.pNext = Nil;
		
		while (ch1 != 'n'){
		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)"; cin >> pT^.nmar;
		ch1 = getch();
}

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

	cout << endl << "№ avtobyca Fio vodiLbl № marshruta";
	while (pAux != Nil){
		cout << endl << pAux^.nom << " " << pAux^.fio << " " << pAux^.nmar;
		cout << endl << "----------------------------------";
		pAux = pAux^.pNext;
	}
}

void Otpravl (PtrRec pLpark, PtrRec pLmarsh) // процедура отправки автобуса на маршрут
{
	string nomer;
	PtrRec pAux,pT1,pT2;

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

	while ((pAux != Nil) && (pAux^.nom != nomer)){
		pAux = pAux^.pNext;
	if (pAux == Nil)
		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) // процедура отправки автобуса в парк
{
	string nomer;
	PtrRec pAux,pT1,pT2;

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

	while ((pAux != Nil) && (pAux^.nom != nomer))
	{
		pAux = pAux^.pNext;
		if (pAux = Nil) 
			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;
			}
		}
	}

}
говорит что неправильно задаю тип, первый раз с типом работаю, подскажите что не так...
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 30.11.2009, 21:34   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

неплохо было показать вывод компилятора, вот что первое увидел
Код:
atoi(&ch);
atoi работает со строкой а не с одним символом. Получить цифру из символа можно так
integer = symbol - 48

Последний раз редактировалось NiCola999; 30.11.2009 в 21:37.
NiCola999 вне форума Ответить с цитированием
Старый 30.11.2009, 21:48   #3
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

вот debug:
Код:
(30) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "PtrRec"
(30) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(30) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(30) : error C2065: Rec: необъявленный идентификатор
(30) : error C3192: синтаксическая ошибка: "^" не является префиксным оператором (возможно, имелось в виду "*"?)
(31) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "pNext"
(31) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(31) : error C2086: int PtrRec: переопределение
(30): см. объявление 'PtrRec'
(31) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(34) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
(40) : error C2628: недопустимый '<unnamed-tag>' с последующим 'int' (возможно, отсутствует ';')
(41) : error C2065: spPark: необъявленный идентификатор
(41) : error C2182: Print_List: недопустимое использование типа "void"
(42) : error C2065: spMarsh: необъявленный идентификатор
(42) : error C2182: Print_List: недопустимое использование типа "void"
(42) : error C2374: Print_List: переопределение; множественная инициализация
(41): см. объявление 'Print_List'
(43) : error C2065: spPark: необъявленный идентификатор
(43) : error C2065: spMarsh: необъявленный идентификатор
(43) : error C2182: Otpravl: недопустимое использование типа "void"
(43) : error C2078: слишком много инициализаторов
и так далее...

а
Код:
atoi(&ch);
я уже использовал в подобной, и нормально всё было!
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"

Последний раз редактировалось Stilet; 01.12.2009 в 09:18.
bpystep вне форума Ответить с цитированием
Старый 30.11.2009, 21:52   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Код:
type 
	PtrRec = ^Rec; 
    PtrRec pNext;    //Указатель на список
struct 
{
	Rec; //список
	string nom;
	string fio;
	int nmar;
}
Ну и как это понимать ?) то что до struct вообще из Паскаля. Потом, где определён Rec? А где же подключение string? и после объявления структур нужно ставить ;
Код:
struct NAME {
    int n, m;
};
...

Цитата:
Сообщение от bpystep
а
Код:

atoi(&ch);

я уже использовал в подобной, и нормально всё было!
NiCola999 правильно сказал, нельзя так делать. Не факт, что следующий за ch байт будет содержать 0, так что это чревато ошибками

Последний раз редактировалось netrino; 30.11.2009 в 21:58.
netrino вне форума Ответить с цитированием
Старый 30.11.2009, 22:04   #5
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

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

Я тут пробежался глазом по программе... Из аналогичной проги на Паскале копировали? ) В общем, книгу в руки, темы: структуры данных(пользовательские типы), указатели, работа с динамической памятью(malloc, free). Ну и можете поискать инфу по динамическим спискам конкретно на C, к примеру где-то на этом форуме такое точно было
netrino вне форума Ответить с цитированием
Старый 30.11.2009, 22:27   #7
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

да я перебивал с паскаля, я в прошлом году писал такую на паскале, но с паскалем все понятно, а вот с С++ не выходит... не поможешь значит? в книжках непонятно! лучше когда русским языком рассказывают.
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 30.11.2009, 23:23   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от bpystep Посмотреть сообщение
в книжках непонятно!
Всё там понятно, главное не пропускать, а нормально читать )
В двух словах
pascal:
Код:
type
    Rec = record
        num   : String;
        fio     : String;
        mnum : Integer;
    end;

    PtrRec = ^Rec;
C++:
Код:
struct Rec {
    std::string num; // Для C без плюсов это не пройдёт
    std::string fio;
    int            mnum;
};
typedef Rec* PtrRec;
Pascal:
Код:
pBegin : PtrRec;
New(pBegin);
...
Dispose(pBegin);
C++:
Код:
PtrRec pBegin;
pBegin = new Rec; // Для C pBegin = malloc(sizeof(Rec));
...
delete pBegin;       // Для C free(pBegin);
Pascal:
Код:
pBegin : PtrRec;
...
pBegin^.pNext := xxx;
C++:
Код:
PtrRec pBegin;
...
pBegin->pNext = xxx;
netrino вне форума Ответить с цитированием
Старый 01.12.2009, 00:40   #9
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 num;
    int fio;
    int mnum;
	Rec* pNext;
};
typedef Rec* PtrRec;

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


int ShowMenu()
{
    char ch = '\0';
    // рисуем меню
    puts("1 : Show list the Bus in the park"); 
    puts("2 : Show list the Bus in route");
    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()
{
   while (1) // выполняем в бесконечном цикле
   {  
      switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
      {  
         case 1: Print_List(); break; // если 1, то смотрим список автобусов в парке
         case 2: Print_List(); break; // если 2, смотрим список автобусов на маршруте
         case 3: Otpravl(); break; // если 3, то отправляем автобусы на маршрут
		 case 4: VPark(); break; // если 4, то отправляем автобусы в парк
         case 5: return 0; // если 4 то выходим из программы
         default:  // если другая кнопка, ничего не делаем
              break;
      }
   }
}

void Create_List() // процедура создания списка автобусов
{

	PtrRec pAux;
	PtrRec pT;

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

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

	cout << endl << "№ avtobyca Fio vodiLbl № marshruta";
	while (pAux != 0){
		cout << endl << pAux->num << " " << pAux->fio << " " << pAux->mnum;
		cout << endl << "----------------------------------";
		pAux = pAux->pNext;
	}
}

void Otpravl () // процедура отправки автобуса на маршрут
{
	int nomer;
	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;
			}	
	
		}
	}
}

void VPark() // процедура отправки автобуса в парк
{
	int nomer;
	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;
			}
		}
	}

}
осталось 2 ошибки, как от них избавиться?

Код:
pLpark: необъявленный идентификатор
pLmarsh: необъявленный идентификатор
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 01.12.2009, 00:49   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Очевидно в оригинальной программе на Паскале эти две переменные объявлены глобально. Раз переписываете рабочую программу, то всё что нужно это добавить эту пару переменных
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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