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

матрица и ее ввод\вывод из фаила - C++

Восстановить пароль Регистрация
 
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
02.12.2010, 16:18     матрица и ее ввод\вывод из фаила #1
Доброго дня ув. форумчане. Пожалуйста помогите исправить программу, делал в Visual Studio 2006, вылазит множество ошибок, я никак не могу понять что именно не правильно(.

Задание таково: дано действительную квадратную матрицу порядка n. Получить новую матрицу путем замены элементов, сумма индексов которых четная на среднее геометрическое модулей элементов, находящихся на главной диагонали. Предусмотреть и сделать главное меню программы, ввод\вывод из\в фаил, вывод на экран, ввод с клавиатуры.

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
 
using std::cout;
using std::cin;
using std::endl;
 
int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
 
int sr_geo(int **arr, int n)
{
        int sr_geo=0;
        float pr=1;
        for(int i=0; i<n; i++)
        {
                pr*=abs(arr[i][i]);
        }
        sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    if (fv=='y')
    masv_file();
    }
    system("pause");
return 0;
}
 
void s_klav()
{
         srand((unsigned)time(NULL));
         int n,i,j;
         int sr;
         int **arr;
         cout<<"Vvedite razmer massiva: ";
         cin>>n;
         arr = new int*[n];
         cout<<"Massiv: "<<endl;
         for(i=0; i<n; i++)
      {
                  arr[i] = new int[n];
                  for(j=0; j<n; j++)
                   {
                     arr[i][j]=rand()%9+1;
                     cout<<arr[i][j]<<"  ";
                        }
            cout<<endl;
      }
}
 
void mas_vyv()
{
         sr = sr_geo(arr,n); 
         cout<<endl;
         cout<<"Sformirovannaya matrica:"<<endl;
         for(i=0; i<n; i++)
         {
                 for(j=0; j<n; j++)
                 {
                         if((i+j)%2==0)
                         {
                                 arr[i][j]=sr;
                         }
                         cout<<arr[i][j]<<"  ";
                 }
              cout<<endl;
         }
     delete arr;
}
 
int m_menu()
{
    int cho;
    do
    {
      cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
      cin>>cho;
      switch(cho)
      {
      case 1:
          s_klav();
          return 1;
          break;
      case 2:
          if(iz_faila())
          return 1;
          else return 0;
          break;
      default: cout<<"vvedite pynkt menu \n";
      }
    }
    while (vyb!=0);
}
 
int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
    gets(fname);
    f=fopen(fname,"rt");
    if(f)
    {
        while(!feof(f))
        {
            if(fgetc(f)=='\n')
                n++;
        }
        fseek(f,0,SEEK_SET);
        m = new float * [n];
        for (i=0;i<n;i++)
        {
            m[i]=new float [n];
        }
        for (i=0;i<n;i++)
        {
            for (j=0;j<n;j++)
                fscanf(f,"%f",&m[i][j]);
        }
        fclose(f);
        return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
 
int masv_file()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
    gets(fname);
    f=fopen(fname,"wt");
    if(f)
    {
        for (i=0; i<n; i++)
        {
            for (j=0; j<n; j++)
            {
               fprintf(f,"%f ",m[i][j]);
            }
            fprintf(f,"\n");
        }
        fclose(f);
        return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
02.12.2010, 16:35     матрица и ее ввод\вывод из фаила #2
C++
1
2
3
int n,i,j;
         int sr;
         int **arr;
ну во-первых если ты в если ты используешь переменные то ты либо должен обьявлять их в каждой функции либо, если тебе важны их значения, передавать их как параметр в функции. вот данные переменные ты обьявил в одной функции"void s_klav()", а пытаешься их использовать и в другой.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
02.12.2010, 16:39     матрица и ее ввод\вывод из фаила #3
Ну описание ошибок говорит само за себя. Много не объявленных переменных. Вы пытаетесь локальные переменные, объявленные в одной функции, использовать в другой. Так нельзя.
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
02.12.2010, 16:44     матрица и ее ввод\вывод из фаила #4
C++
1
while (vyb!=0);
переменная vyb вообще нигде не обьявлена. вот пример как может выглядеть процедура
C++
1
void mas_vyv(int n, int i, int j, int sr, int **arr)
она на вход получает данные переменные
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
02.12.2010, 19:25  [ТС]     матрица и ее ввод\вывод из фаила #5
спасибо, вот так правильней?

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;
int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
int **arr;
int Rw = 0;        //Размерность матрицы
int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    
    system("pause");
return 0;
}
void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;
    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[n];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}
void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}
int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        if(iz_faila())
        return 1;
        else return 0;
        break;
    
        default: cout<<"vvedite pynkt menu \n";
    }
}
int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
//    f=fopen(fname,"rt");
//    int n=0, m=0;
//    if(f)
//    {
//        while(!feof(f))
//        {
//            if(fgetc(f)=='\n')
//                n++;
//        }
//        fseek(f,0,SEEK_SET);
//        m = new float * [n];
//        for (i=0;i<n;i++)
//        {
//            m[i]=new float [n];
//        }
//        for (i=0;i<n;i++)
//        {
//            for (j=0;j<n;j++)
//                fscanf(f,"%f",&m[i][j]);
//        }
//        fclose(f);
//        return 1;
//    }
//    else 
//    {
//        cout<<"Oshibka otkritiya!\n";
//        return 0;
//    }
}
int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.dat", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", &arr[i][j]);
                printf(" %d ", &arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
вандал
126 / 126 / 1
Регистрация: 20.11.2009
Сообщений: 498
02.12.2010, 22:50     матрица и ее ввод\вывод из фаила #6
Честно говоря не хочется в такой код вникать но вроде он компилируется. если работает то нормально
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2010, 21:44     матрица и ее ввод\вывод из фаила
Еще ссылки по теме:

Матрица: ввод, вывод, выполнение задания. Оформление с функциями и меню C++
C++ Поменять консольный ввод-вывод на файловый ввод-вывод
C++ Класс "Матрица": ввод/вывод, умножение, сложение/вычитание, транспонирование, сдвиг

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
03.12.2010, 21:44  [ТС]     матрица и ее ввод\вывод из фаила #7
никак не получается сделать функцию "int iz_faila()", не получается сделать что бы считывало матрицу из фаила!(, помогите пожалуйста.

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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <iostream>
#include <ctime> 
#include <cmath>
#include <stdio.h>
#include <cstdlib>
  
using namespace std;
int sr_geo(); //среднее геометрическое
void s_klav(); //ввод с клавиатуры
void mas_vyv(); //вывод на экран
int m_menu(); //меню программы
int iz_faila(); //ввод из фаила
int masv_file(); //вывод в фаил
int **arr;
int Rw = 0;        //Размерность матрицы
int sr_geo(int **arr, int n)
{
    int sr_geo=0;
    float pr=1;
    for(int i=0; i<n; i++)
        pr*=abs(arr[i][i]);
    
    sr_geo = (int)exp(log((float)pr)/n);
        return sr_geo;
}
 
 
int main()
{
    char fv;
    if(m_menu())
    {
    cout<<"Resultat: \n";
    mas_vyv();
    
    cout<<"Vyvesti v fail? y/n \n";
    cin>>fv;
    
    if (fv=='y')
        masv_file();
    else printf("Exit \n");
    }
    
    system("pause");
return 0;
}
void s_klav()
{
    srand((unsigned)time(NULL));
    int n,i,j;
    int sr;
    cout<<"Vvedite razmer massiva: ";
    cin>>Rw;
    arr = new int*[Rw];
    cout<<"Massiv: "<<endl;
    
    for(i=0; i<Rw; i++)
    {
        arr[i] = new int[n];
        for(j=0; j < Rw; j++)
        {
            arr[i][j]=rand()%9+1;
            cout<<arr[i][j]<<"  ";
        }
            cout<<endl;
    }
}
void mas_vyv()
{
    int sr = sr_geo(arr,Rw); 
        cout<<endl;
        cout<<"Sformirovannaya matrica:"<<endl;
        for(int i=0; i < Rw; i++)
        {
            for(int j=0; j < Rw; j++)
            {
                    if((i+j)%2==0)
                    {
                            arr[i][j]=sr;
                    }
                    cout<<arr[i][j]<<"  ";
            }
            cout<<endl;
        }
            delete arr;
}
int m_menu()
{
    int cho;
    
    cout<<"1 - vvesti s klaviaturi\n2 - iz faila\n0 - vyhod\n";
    cin>>cho;
    switch(cho)
    {
    case 0:
        exit('Exit');
        break;
    case 1:
        s_klav();
        return 1;
        break;
    case 2:
        if(iz_faila())
        return 1;
        else return 0;
        break;
    
        default: cout<<"vvedite pynkt menu \n";
    }
}
int iz_faila()
{
    FILE *f;
    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
//    f=fopen(fname,"rt");
//    int n=0, m=0;
//    if(f)
//    {
//        while(!feof(f))
//        {
//            if(fgetc(f)=='\n')
//                n++;
//        }
//        fseek(f,0,SEEK_SET);
//        m = new float * [n];
//        for (i=0;i<n;i++)
//        {
//            m[i]=new float [n];
//        }
//        for (i=0;i<n;i++)
//        {
//            for (j=0;j<n;j++)
//                fscanf(f,"%f",&m[i][j]);
//        }
//        fclose(f);
//        return 1;
//    }
//    else 
//    {
//        cout<<"Oshibka otkritiya!\n";
//        return 0;
//    }
}
int masv_file()
{
//    char fname [80];
    cout<<"Vvedite polnoe nazvanie fayla: \n";
//    gets(fname);
    
    FILE *pFile = fopen("File.dat", "w+");
    if(pFile!=NULL)
    {
        for (int i=0; i < Rw; i++)
            for (int j=0; j < Rw; j++)
            {
                fprintf(pFile,"%d ", &arr[i][j]);
                printf(" %d ", &arr[i][j]);
            }
                fprintf(pFile,"\n");
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        return 0;
    }
}
Yandex
Объявления
03.12.2010, 21:44     матрица и ее ввод\вывод из фаила
Ответ Создать тему
Опции темы

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