Форум программистов, компьютерный форум CyberForum.ru

Компьютерный кластер (лабораторная работа) - C++

Восстановить пароль Регистрация
 
FYlhtq_163_93
 Аватар для FYlhtq_163_93
5 / 5 / 1
Регистрация: 27.12.2010
Сообщений: 29
04.06.2012, 22:53     Компьютерный кластер (лабораторная работа) #1
В лабе мне нужно было посредством ООП на языке C++ написать программу, которая читает данные о кластере(о всех компах, серверах и т.п.) из файла, удаляет элементы из кластера, записывает в другой или в тот же файл данные измененного кластера, сравнивает два кластера. Проблема стоит в следующем, ошибка в чтении файла, а именно в чтении строки с названием ОС. Ошибка выскакивает непосредственно при выполнении программы. Прикрепляю хэдэры, описывающие все классы(комп, сервер, кластер) и код использующие все эти методы.
comp.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <iostream>
#include <time.h>
#include <sstream>
using namespace std;
class ccomp
{
public:
    int mcpu;
    int mram;
    int mhdd;
    char* mos ;
    /*int find_com();*/
    int midcom;
    bool operator==(ccomp& rv);
    int ins_com(int cpu, int ram, int hdd, char* os);
    int del_com(int midc);
};
 
int ccomp::ins_com(int cpu,int ram, int hdd, char* os)
{
    mcpu=cpu;
    mram=ram;
    mhdd=hdd;
    srand((unsigned)time(NULL));
    int i=rand()%7;
    strcpy(mos,os);
    srand((unsigned)time(NULL));
    midcom=rand()%256;
    return midcom;
};
int ccomp::del_com(int midc)
{
    return midc=-1;
}
bool ccomp::operator==(ccomp& rv)
{
    if((mcpu==rv.mcpu)&&(mhdd==rv.mhdd)&&(mram==rv.mram)&&(strcmp(mos,rv.mos)==0))return true; else return false;
}
server.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "comp.h"
class cserver: public ccomp
{
public:
    int mncpu;
    int mnhdd;
    /*int find_com();*/
    bool operator==(cserver& rv);
    int ins_serv(int cpu, int ram, int hdd, char* os, int ncpu,int nhdd);
    int del_serv(int midcom);
};
int cserver::ins_serv(int cpu, int ram, int hdd, char* os, int ncpu,int nhdd)
{
    ins_com(cpu, ram, hdd, os);
    mncpu=ncpu;
    mnhdd=nhdd;
    srand((unsigned)time(NULL));
    midcom=(rand()%16+1)*4-1;
    return midcom;
}
int cserver::del_serv(int midcom)
{
    return midcom=-1;
}
bool cserver::operator==(cserver& rv)
{
    if((mcpu==rv.mcpu)&&(mhdd==rv.mhdd)&&(mram==rv.mram)&&(strcmp(mos,rv.mos)==0)&&(mncpu==rv.mncpu)&&(mnhdd==rv.mnhdd))return true; else return false;
}
claster.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "server.h"
class cclaster
{
private:
    int midclast;
protected:
    string fname;
    ifstream in;
    ofstream out;
public:
    int mncom;
    int mnserv;
    ccomp mcom[256];
    cserver mserv[16];
    void write_clast(string fname);
    int read_clast(char* fname);
    int del_clast(int midclast);
    bool operator==(cclaster &rv);
};
 
int cclaster::read_clast(char* fname)
{
    int ncom; int nserv; ccomp com[256]; cserver serv[16];
    in.open(fname);
    if(!in){
        cout << "no open file";
    }
    else{
      in >> ncom;
      in >> nserv;
    mncom=ncom;
    mnserv=nserv;
    for(int i=0;i<ncom;i++){
        int cpu; int ram; int hdd; char* os; string st;
        os=new char;
        in >> st >> cpu >> ram >> hdd;
        strcpy(os,st.c_str());
        com[i].ins_com(cpu, ram, hdd, os);
    }
    for(int i=0;i<nserv;i++){
        int cpu; int ram; int hdd; char* os; int ncpu; int nhdd; string st;
        os=new char;
        in >> st >> cpu >> ram >> hdd >> ncpu >> nhdd;
        strcpy(os,st.c_str());
        serv[i].ins_serv(cpu, ram, hdd, os, ncpu, nhdd);
    }
    in.close();
    srand((unsigned)time(NULL));
    midclast=(rand()%4+1)*64-1;
    return midclast;
    }
    return 0;
}
void cclaster::write_clast(string fname)
{
    ccomp com[256]; cserver serv[16];
    out.open(fname.c_str());
    if(!out){
        cout << "no open file";
    }
      out << mncom << "\n";
      out << mnserv << "\n";
      int ncom=mncom;
      int nserv=mnserv;
    for(int i=0;i<ncom;i++){
        if(com[i].midcom>0)
            out << com[i].mos << " " << com[i].mcpu << " " << com[i].mram << " " << com[i].mhdd << "\n";
    }
    for(int i=0;i<nserv;i++){
        if(serv[i].midcom)
            out << serv[i].mos << " "  << serv[i].mcpu << " " << serv[i].mram << " " << serv[i].mhdd << " " << serv[i].mncpu << " " << serv[i].mnhdd << "\n";
    }
    out.close();
}
int cclaster::del_clast(int midclast)
{
    return midclast=-1;
}
bool cclaster::operator==(cclaster& rv)
{
    bool tmp=true;
    if((mncom!=rv.mncom)||(mnserv!=rv.mnserv)) tmp=false;
    else
    {
        for(int j=0;j<mncom;j++){if(mcom[j]==rv.mcom[j])tmp=true; else {tmp=false; break;}}
        for(int j=0;j<mnserv;j++){if(mserv[j]==rv.mserv[j])tmp=true; else {tmp=false; break;}}
    }
    return tmp;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "claster.h"
int main()
{
    cclaster clast,clast1;
    char* name;
    string fname=new char;
    int command=1;
    int id;
    int i;
    cout << "Enter a name of file \n";
    cin >> fname;
    name=new char;
    strcpy(name,fname.c_str());
    id=clast.read_clast(name);
    cout<<"ClasterID_"<<id<<"\n";
    cout<<"ServersIDs\n";
    for(i=0;i<clast.mnserv;i++)cout<<clast.mserv[i].midcom<<"/n";
    cout<<"ComputerIDs\n";
    for(i=0;i<clast.mncom;i++)cout<<clast.mcom[i].midcom<<"/n";
    cout << "What you want to do? \n 1-delete a server \n 2-delete a comp \n 3-add a server \n 4-add a comp \n 5-record in file \n 6-Equal with other file \n 0-exit \n";
    while(command)
    {
        cin >> command;
        switch(command)
        {
        case 1: cout << "Enter a id of server \n";
                cin >> id;
                for(i=0; i<clast.mnserv;i++){if(clast.mserv[i].midcom==id)clast.mserv[i].del_serv(id);break;}
        case 2: cout << "Enter a id of comp \n";
                cin >> id;
                for(i=0; i<clast.mncom;i++){if(clast.mcom[i].midcom==id)clast.mcom[i].del_com(id);break;}
        /*case 3: cout << "Enter a id of server \n";
                cin >> id;
                for(i=0; i<clast.mnserv;i++){if(clast.mserv[i].midcom==id)clast.mserv[i].del_serv(id);break;}
        case 4: cout << "Enter a id of comp \n";
                cin >> id;
                for(i=0; i<clast.mncom;i++){if(clast.mcom[i].midcom==id)clast.mcom[i].del_com(id);break;}*/
        case 5: cout << "Enter a name of file \n";
                cin >> name;
                clast.write_clast(name);
        case 6: cout << "Enter a name of file \n";
                cin >> name;
                clast1.read_clast(name);
                if(clast==clast1)cout << "This clasters are equals \n";
                else cout << "This clasters are not equals \n";
        }
return 0;
    }
}
P.S. На то, что закомментировано в мэйне, не обращайте внимание. Мой небольшой загон))) Буду премного благодарен если поможете разобраться с ошибкой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 22:53     Компьютерный кластер (лабораторная работа)
Посмотрите здесь:

C++ Лабораторная работа
Лабораторная работа C++
C++ Лабораторная работа №1
C++ лабораторная работа
Лабораторная работа C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 341
04.06.2012, 22:58     Компьютерный кластер (лабораторная работа) #2
Цитата Сообщение от FYlhtq_163_93 Посмотреть сообщение
string fname=new char;
не вникал в код, но это вызвало у меня подозрение. может new string ?
FYlhtq_163_93
 Аватар для FYlhtq_163_93
5 / 5 / 1
Регистрация: 27.12.2010
Сообщений: 29
04.06.2012, 23:23  [ТС]     Компьютерный кластер (лабораторная работа) #3
Как я понял string это тоже самое что char*. Видимо в этом есть часть моей ошибки, да?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
04.06.2012, 23:26     Компьютерный кластер (лабораторная работа) #4
char это вобще один символ, а в string память выделять не надо, это не динамический массив
FYlhtq_163_93
 Аватар для FYlhtq_163_93
5 / 5 / 1
Регистрация: 27.12.2010
Сообщений: 29
04.06.2012, 23:59  [ТС]     Компьютерный кластер (лабораторная работа) #5
Хорошо, а вот с вводом из файла не знаете чем помочь, потому что вовремя выполнения у меня выскакивает ошибка инструкция "0х........" не смогла обратиться по адресу "0х00000000". Здесь как исправить это?
Yandex
Объявления
04.06.2012, 23:59     Компьютерный кластер (лабораторная работа)
Ответ Создать тему
Опции темы

Текущее время: 03:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru