Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Помогите дописать прогу!!!! Плз!! Погибаю!!!!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
.:P@H@N:.
Гость





СообщениеДобавлено: Ср Июн 30 2004 20:27    Заголовок сообщения: Помогите дописать прогу!!!! Плз!! Погибаю!!!! Ответить с цитатой

Пожалуйста помогите!!!! Погибаю!!!!Задание:
На языке С++ реализовать класс для работы с ориентированным графом и консольную программу для его тестирования.
Класс должен содержать следующие методы:
конструктор;
деструктор;
загрузить граф из файла (параметр - имя файла, граф задан ребрами, в каждой строке файла содержатся номера начальной и конечной вершин ребра, разделенные пробелами);
вывести таблицу связности графа на экран.
Хранение данных реализовать с помощью односвязного списка. Необходимо корректно обрабатывать попытку работы с отсутствующими данными.
Консольная программа для тестирования класса должна позволять пользователю в инте-рактивном режиме вызывать методы класса, проверять допустимость последовательности вызо-вов, выводить результаты работы на экран.

Unit1.cpp
#pragma hdrstop
#include "unit2.h"
//#include <windows.h>
#include <stdio.h>
//#include <stdlib.h>
#include <locale.h>
#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
Graf *gr = NULL;
bool done = false;
//SP *tmp = NULL;
wchar_t fname[255];
int c;

setlocale (LC_ALL, "Russian_Russia.866");

while (!done) {
clrscr();
wprintf(L"Меню:n");
wprintf(L"C - Создатьn");
wprintf(L"D - Удалитьn");
wprintf(L"L - Загрузить графn");
wprintf(L"P - Вывести на печатьn");
wprintf(L"X - Выходn");

switch (c = getch()) {
case 'c':
if (gr != NULL) {
wprintf(L"Граф УЖЕ созданn");
getch();}
else {
gr = new Graf();
wprintf(L"Граф созданn");
getch();
};
break;

case 'd':
if (gr == NULL){
wprintf(L"nГраф ЕЩЕ не созданn");
getch();}
else {
delete gr;
gr = NULL;
wprintf(L"nГраф удалёнn");
getch();
};
break;

case 'x':
wprintf(L"nВыполнение законченоn");
getch();
done = true;
break;

case 'l':
if (gr == NULL)
{
wprintf(L"Граф ЕЩЕ не созданn");
getch();
break;
}
wprintf(L"Укажите путь: ");
wscanf(L"%ls", fname);
gr->open(fname);
getch();
break;

default:
wprintf(L"Указан несуществующий пункт менюn");
}
}
delete gr;
return 0;
}
//---------------------------------------------------------------------------


Unit2.cpp
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)

Graf::Graf()
{
first = NULL;
};

Graf::~Graf()
{
while (first != NULL) {
pop();
};
};

void Graf::push(SP *sp)
{
S *tmp = new S;
tmp->sp = sp;
tmp->next = first;
first = tmp;
};

void Graf::pop()
{
S *tmp;
tmp = first->next;
// нужно ли здесь освободить содержимое tmp->sp ?
delete first;
first = tmp;
};

void Graf::open(const wchar_t *fname)
{

FILE *f = _wfopen(fname, L"rt");
if (f != NULL){
int a, b;
while (!feof(f)) {
// здесь может быть прочитано a и не прочитано b
fscanf(f, "%i %i", &a, &b);
push(new SP(a, b));
};
wprintf(L"Граф успешно загружен");
}
else
wprintf(L"Файл не существует!!!");
fclose(f);

// вариант функции в корпоративном стиле, с проверками
/*
// очистка, если граф не пустой
while (first != NULL) {
pop();
};

FILE *f = fopen(fname, "rt");
if (NULL == f)
goto error; // файл не был открыт

int a, b;
while (!feof(f)) {
if (2 != fscanf(f, "%i %i", &a, &b))
goto error; // считано не 2 значения

push(new SP(a, b));
};

// завершение функции: закрытие файла и возврат успеха
fclose(f);
return true;

error:
// выход при ошибочной ситуации: очистка графа,
// закрытие файла, возврат ошибки
while (first != NULL) {
pop();
};
if (NULL != f)
fclose(f);
return false;
*/
}
//---------------------------------------------------------------------------



Unit2.h
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H

class SP
{
private:
int is;
int s;
public:
SP(int a, int b)
{
is = a;
s = b;
};
//~SP(){delete sp};
};

class Graf
{
char *fname[];
public:
class S
{
public:
SP *sp;
S *next;
};
S *first;
Graf();
~Graf();
void push(SP *sp);
void pop();
void open(const wchar_t *fname);
//void print();
};
//---------------------------------------------------------------------------
#endif




На самом деле задание можно переформулировать проще:
Из файла загрусить в список вершины;
Пример файла:
1 4
1 2
5 7
,,,,

При построении таблицы связности:
выяснить размерность(для этого при загрузки из файла найти наибольшее число и приравнять его к N)
построить нулевую матрицу размером N
считывать из списка вершины и на пересечении соответствующих позиций в матрице ставить единицу
на позиции 1-4 будет стоять 1 и т.д.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...