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

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

Восстановить пароль Регистрация
 
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
09.12.2010, 21:12     матрица, и вывод из\в фаил #1
не работает так как хотелось бы(, а в чем проблемы я не могу понять((, когда начинает считать матрицу введенную с клавиатуры, просто берет и вылетает, а ошибки как таковой я не нахожу(. пожалуйста помогите!

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
172
173
174
#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";
    }
    return 1;
}
int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Определяем размерность матрицы записанной в файл
                printf(" %c ", ch);            //Выводим
        }
        
        printf("\n Number = %d \n", nElements);
        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.txt", "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;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
12.12.2010, 00:05  [ТС]     матрица, и вывод из\в фаил #2
помогите, это очент срочно, пожалуйста!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
12.12.2010, 00:31     матрица, и вывод из\в фаил #3
No0b41k, Эм...
C++
1
arr[i] = new int[n];
При этом n указано без инициализации. Итого выделяем память под массив муссорного кол-ва элементов. Оригинально
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
12.12.2010, 21:40  [ТС]     матрица, и вывод из\в фаил #4
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
172
173
174
#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[Rw];
        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";
    }
    return 1;
}
int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Îïðåäåëÿåì Г°Г*çìåðГ*îñòü Г¬Г*òðèöû Г§Г*ГЇГЁГ±Г*Г*Г*îé Гў ГґГ*éë
                printf(" %c ", ch);            //Âûâîäèì
        }
        
        printf("\n Number = %d \n", nElements);
        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.txt", "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;
    }
}
спасибо огромное!, вот поправил, а как теперь сделать что бы выводило далее в фаил?, просто теперь когда выскакивает "vyvesti v fayl?" и нужно ввести y или n, что бы подтвердить или отказаться, а оно просто пишет "нажмите любую клавишу для продолжения, и на этом программа завершается.
No0b41k
 Аватар для No0b41k
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 68
14.12.2010, 15:10  [ТС]     матрица, и вывод из\в фаил #5
немного подправил, теперь первая ошибка исчезла, но появилась другая, когда нажимаешь "y" то есть как бы соглашаешься вывести матрицу в фаил, то пишет "обнаружена ошибка, приложение будет остановлено, отправлить ли отчет на microsoft ....". а в проге пишет "press any key to continue".

а вторая ошибка осталась:

http://s015.***********/i330/1012/fc/015799135a87.jpg

а вот это выскакивает, когда выбираю пункт меню "2 - 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
171
172
173
174
175
176
177
178
179
180
#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";
   do 
   {
       cin>>fv;
    }while(fv!='y' && fv!='n');
    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[Rw];
        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:
        return iz_faila();
        break;
 
        default: cout<<"vvedite pynkt menu \n";
    }
    return 1;
}
int iz_faila()
{
    FILE *f;
    char FileName [80];
    printf ("Insert your full address: ");
    gets (FileName);
    printf ("File name %s\n", FileName);
    f=fopen(FileName,"rt");
    int nElements = 0, m=0;
    char ch;
     if(f!=NULL)
    {
        printf("File was open! \n");
        while ( ( ch = getc ( f ) ) != EOF )
        {
            if((ch != '\n') && (ch != ' ')) nElements++;    //Îïðåäåëÿåì Г°Г*çìåðГ*îñòü Г¬Г*òðèöû Г§Г*ГЇГЁГ±Г*Г*Г*îé Гў ГґГ*éë
                printf(" %c ", ch);            //Âûâîäèì
        }
        
        printf("\n Number = %d \n", nElements);
        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.txt", "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");
            puts("");
        }
        fclose(pFile);
            return 1;
    }
    else 
    {
        cout<<"Oshibka otkritiya!\n";
        exit(1);
    }
    return 1;
}
deadlock
 Аватар для deadlock
372 / 351 / 7
Регистрация: 14.12.2010
Сообщений: 1,265
14.12.2010, 15:39     матрица, и вывод из\в фаил #6
в функции void mas_vyv() в конце зачем-то стоит delete arr, естественно, что после этого обращение к элементам массива вызывает ошибку.
а в функции int iz_faila() нужно заменить gets (FileName) на scanf("%s",FileName)
Yandex
Объявления
14.12.2010, 15:39     матрица, и вывод из\в фаил
Ответ Создать тему
Опции темы

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