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

Массивы. Структурные типы. - C++

Восстановить пароль Регистрация
 
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
20.11.2011, 14:49     Массивы. Структурные типы. #1
Доброго времени суток Вам!
Помогите пожалуйста написать программу, обрабатывающую рациональные дроби, хранящиеся в двумерном массиве (матрице). Каждая рациональная дробь определяется как пара (числитель, знаменатель).
На входе программы – две матрицы рациональных дробей (формат представления дробей нужно разработать самостоятельно).
Программа должна обеспечить загрузку двух матриц и вычисление их суммы.
В файл результатов нужно напечатать как исходные матрицы, так и результат вычислений.
Буду очень признателен, если поможете мне. За ранее благодарю!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Krasti
27 / 27 / 3
Регистрация: 07.11.2010
Сообщений: 140
20.11.2011, 14:58     Массивы. Структурные типы. #2
Нет, ну я понимаю, если у тебя не получается реализовать какую либо идею. Но просить и саму идею придумать за тебя - это перебор. Приди и скажи преподавателю, я нихрена не понимаю в программировании и не хочу разбираться, потому что я выбрал не ту специальность/направление...
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
20.11.2011, 21:45  [ТС]     Массивы. Структурные типы. #3
Идея такова:
Входной файл ("a.txt"):

//матрица А:
1/2 3/5 2/3
12/7 3/2 6/17
5/3 7/2 4/4

//матрица Б:
1/3 4/5 3/1
11/2 4/7 3/10
12/3 5/7 7/10

(естественно.. в самом файле только рациональные дроби)

далее...:
У меня проблема со считыванием из файла, не знаю как его грамотнее организовать...
Я создаю две структуры.. структуру элементов и структуру матриц

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
#include <iostream>
#include <fstream>
using namespace std;
 
struct Spisok
{
    Spisok *next;
    int x,y;
};
 
struct Matirx
{
    Spisok *start, *b;
    char a; //путь к файлу
 
    int in()
    {
        char s=getc(a); //
        float n=0.0, m=0.0;
        int i=1;
        bool flag=true;
        while(s!=/*условие конца строки*/)
            if((s>='0') && (s<='9'))
            {
                if(flag==true)
                    n=n*10+('s'-'1'+1);
                else
                    m=m*10+('s'-'1'+1);
            }
            if((s=='/') && (s==' '))
            {
                if(flag==true)
                    start->x=n;
                else
                    start->y=m;
                start=start->next;
                flag==!flag;
            }
            s=getc(a);
}
};
 
int main(int argc, char* argv[])
{
    const char* fileName="inputFile.txt";
    //in(fileName);
}
мне просто нужно подсказать как лучше их в файле представить и считать из него... а дальше я сам все сделаю

Добавлено через 6 часов 13 минут
Идея изменилась:
-по умолчанию в программе должны быть матрицы 3х3

inputfile.txt содержит:
1 2 3 5 2 3
12 7 3 2 6 17
5 3 7 2 4 4

1 3 4 5 3 1
11 2 4 7 3 10
12 3 5 7 7 10
далее...:

file.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef _FILE_H
#define _FILE_H
 
#include "elem.h"
#include "matrix.h"
 
//ф-ия проверки на существование всякой... тра-ля-ля...
int checkFile(int );
 
//ф-ия проверки существования входного файла и наличия в нем элементов матрицы
int checkInFile(int );
 
//ф-ия проверки вывода элементов из файла
int checkOutElem(const char* , Elem* , int );
 
//подсчет числа элементов во входном файле
int countElemnts(const char* );
 
//чтение элементов из входного файла
bool readElemnts(const char* , Elem* , int );
 
#endif
file.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "file.h"
 
int checkFile(int argc)
{
    if (argc < 3)
    {
        cout<<"Строка запуска: Matrix.exe inputfile.txt outputfile.txt"<<endl;
        return -1;
    }
    else return 0;
}
 
int checkInFile(int elemNum)
{
    if(elemNum<9)
    {
        cout<<"Входной файл не существует или в нем слишком мало элементов для формирования матрицы"<<endl;
        return 0;
    }
    else return -2;
}
 
int checkOutElem(const char* inFileName,Elem* elemArr,int elemNum)
{
    if (!readElemnts(inFileName,elemArr,elemNum))
    {
        cout<<"Неизвестная ошибка при вводе точек из файла"<<endl;
        return 0;
    }
    else return -3;
}
 
int countElemnts(const char* fileName)
{
    ifstream in(fileName);
    //файл не открыт
    if (!in.is_open())
        return 0;
    Elem e;
    int i; //тут, т.к. нам нужно вернуть i в качестве результата ф-ии 
    for (i=0; ;i++)
    {
        in>>e;
        if (in.fail())
            break;
    }
    return i;
}
 
bool readElemnts(const char* fileName,Elem* elemArr,int maxElemNum)
{
    ifstream in(fileName);
    //файл не открыт
    if (!in.is_open())
        return 0;
    for (int i=0; i<maxElemNum; i++)
    {
        in>>elemArr[i];
        if (in.fail())
            return false;
    }
    return true;
}
elem.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef _ELEM_H
#define _ELEM_H
 
#include <iostream>
#include <fstream>
using namespace std;
 
struct Elem
{
private:
   int numer,denom;
public:
   Elem();
   //ввод элементов
   friend istream& operator >> (istream& , Elem& );
   //вывод элементов
   friend ostream& operator << (ostream& , const Elem& );
};
 
#endif
elem.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "elem.h"
 
Elem::Elem()
{
    numer=0;
    denom=1;
}
 
istream& operator >> (istream& in, Elem& e)
{
    in>>e.numer>>e.denom;
    return in;
}   
 
ostream& operator <<(ostream& out, const Elem& e)
{
    out<<"("<<e.numer<<" "<<e.denom<<")";
    return out;
}
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
#include "file.h"
/*#include <iostream>
using namespace std;*/
 
int main(int argc, char** argv)
{
    setlocale(2, "Russian");
    checkFile(argc); //ф-ия проверки существования файлов программы
    //имя входного файла
    const char* inFileName="inputfile.txt";
    const char* outFileName="outputfile.txt";
    //определение общего количества элементов входного файла
    int elemNum=countElemnts(inFileName);
    //cout<<"Количество элементов: "<<elemNum;
    checkInFile(elemNum);
    Elem *elemArr=new Elem[elemNum]; //массив элементов матрицы
    checkOutElem(inFileName,elemArr,elemNum);
    //размерновть матрицы, будем использовать 3 сразу и для строк и для столбцов
    const int dimMaxMatrix=3;
    Matrix matrixArr[dimMaxMatrix];
 
    
    cout<<endl; system("Pause");
    return 0;
}
как мне теперь сделать матрицу!??
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
21.11.2011, 02:10  [ТС]     Массивы. Структурные типы. #4
новая версия программы
to Krasti
как мне осуществить сложение!?
Вложения
Тип файла: rar pract_3.rar (1.49 Мб, 6 просмотров)
Selector_Al
0 / 0 / 0
Регистрация: 25.05.2011
Сообщений: 12
21.11.2011, 02:15  [ТС]     Массивы. Структурные типы. #5
Цитата Сообщение от Krasti Посмотреть сообщение
Нет, ну я понимаю, если у тебя не получается реализовать какую либо идею. Но просить и саму идею придумать за тебя - это перебор. Приди и скажи преподавателю, я нихрена не понимаю в программировании и не хочу разбираться, потому что я выбрал не ту специальность/направление...
Да, я думал Вы мне ее подкинете, после этого сообщения я сел и по разбирался... про факультет - Вы вероятно не правы..

Добавлено через 3 минуты
const char* inFileName=argv[1]; - почему так программа не работает, а так работает:

const char* inFileName="inputfile.txt";
Yandex
Объявления
21.11.2011, 02:15     Массивы. Структурные типы.
Ответ Создать тему
Опции темы

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