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

Доработать пункт меню - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 13:22     Доработать пункт меню #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
 case 2:{
                  int i, j,size;
                  char nameInput[30]
                  FILE *f1;
                  cout<<"Введите имя файла: ";
                  cin>>nameInput;
                  f1=fopen(nameInput,"r");
                  while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
                  {
                        cout<<"\tОшибка открытия файла!\n";
                        cout<<"Введите имя файла: ";   //спрашиваешь имя
                        cin>>nameInput;       //считываешь имя
                        f1 = fopen(nameInput,"r");//открытие файла1
                  }
                  fflush(f1);
                  fscanf(f1, "%d", &size);
                  int **matr=new int *[n];
                  for(i=0; i<n; i++)
                        {
                                matr[i]=new int[n]; 
                        }
                  int *masiv=new int[n*n];
                  for (i=0;i<size;i++)
                       {
                       for (j=0;j<size;j++)
                       fscanf (f1,"%d ",&matr[i][j]);
                       }
                        for (i=0;i<=size-1;i++)
                      {
                      for (j=0;j<=size-1;j++)
                      cout << matr[i][j] << " ";
                      cout<<endl;
                      }
                   matrica(matr,n);//функция вывода матрицы на консоль
                    maxsum(matr,n);//функция поиска максимальной среди сумм
                    for(int i = 0; i < n; i++) {
                  delete[] matr[i];}                               
                  delete[] matr;
                 break;}
Помогите доработать,к результате в окне что то не то
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 13:58     Доработать пункт меню #2
Сразу скажу что лишь подправил приведенное, но исходный код это суржик - смесь С и С++
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Помогите доработать,к результате в окне что то не то
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
{
                  int i, j, n;
                  char nameInput[30]
                  cout<<"Введите имя файла: ";
                  cin>>nameInput;
                  FILE *f1=fopen(nameInput,"r");
                  while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
                  {
                        cout<<"\tОшибка открытия файла!\n";
                        cout<<"Введите имя файла: ";   //спрашиваешь имя
                        cin>>nameInput;           //считываешь имя
                        f1 = fopen(nameInput,"r");//открытие файла1
                  }
                  fscanf(f1, "%d", &n);
                  int **matr=new int *[n];
                  for (i=0;i<n && !foef(f);i++)
                  {
                       matr[i]=new int[n]; 
                       for (j=0;j<n && !foef(f);j++)
                            fscanf (f1,"%d ",&matr[i][j]);
                  }
                   matrica(matr,n);//функция вывода матрицы на консоль
                    maxsum(matr,n);//функция поиска максимальной среди сумм
                    for(int i = n - 1; 0 <= i; i--) 
                          delete[] matr[i];                               
                  delete[] matr;
                 break;
}
Добавлено через 2 минуты
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
к результате в окне что то не то
- понятное дело

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
int **matr=new int *[n];
- n - вы откуда взять хотите???
Наверное fscanf считываете число элементов а потом сами элементы уже в цикле, прав?
Ну тогда переименуйте Ваше size в и делайте чтение

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
int *masiv=new int[n*n];
- а это зачем?

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
matrica(matr,n);//функция вывода матрицы на консоль
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
for (j=0;j<=size-1;j++)
* * * * * * * * * * * cout << matr[i][j] << " ";
* * * * * * * * * * * cout<<endl;
* * * * * * * * * * * }
- зачем 2 раза печатать???
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 14:09  [ТС]     Доработать пункт меню #3
голова кипит,да считывает с файла матрицу
4 ->размерность
1 2 3 4
4 5 6 7
7 8 9 0
4 7 1 8

foef(f) я так понимаю файл foef(f1) верно?
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 14:14     Доработать пункт меню #4
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
foef(f) я так понимаю файл foef(f1) верно?
- угу писал в блокноте и выпустил из вида
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 14:49  [ТС]     Доработать пункт меню #5
for (i=0;i<n && !foef(f1);i++)
`foef' undeclared (first use this function)

это библиотеку надо допистаь какую или что?

Добавлено через 29 минут
а как еще сделать проверку что если в файле матрица не полностью заполнена
4
1 2 3 4
4 5 6 7
7 8 9 0
4 7
такая матрица то ошибка?
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 16:39     Доработать пункт меню #6
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
`foef' undeclared (first use this function)
- feof прописана на сколько помню в stdio и никогда ничего не требовала доп к подключению, там поток f1 должен
быть вы его исправили на foef(f1)???
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
а как еще сделать проверку что если в файле матрица не полностью заполнена
- сейчас постучу по клавишам, как будет готово отпишусь...
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 16:45  [ТС]     Доработать пункт меню #7
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
char nameInput[30];
                  cout<<"Введите имя файла: ";
                  cin>>nameInput;
                  FILE *f1=fopen(nameInput,"r");
                  while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
                  {
                        cout<<"\tОшибка открытия файла!\n";
                        cout<<"Введите имя файла: ";   //спрашиваешь имя
                        cin>>nameInput;           //считываешь имя
                        f1 = fopen(nameInput,"r");//открытие файла1
                  }
                  fscanf(f1, "%d", &n);
                  int **matr=new int *[n];       
                  for (i=0;i<n ;i++)
                  {
                       matr[i]=new int[n];           
                       for (j=0;j<n ;j++)
                            fscanf (f1,"%d ",&matr[i][j]);
                  }
 
                   matrica(matr,n);//функция вывода матрицы на консоль
                    maxsum(matr,n);//функция поиска максимальной среди сумм
                    for(int i = n - 1; 0 <= i; i--) {
                          delete[] matr[i];          }                     
                  delete[] matr;
                 break;
Вот так работает только
сейчас постучу по клавишам, как будет готово отпишусь...
жду

C++
1
2
3
4
5
if(fscanf (f1,"%d ",&matr[i][j]) != 1){
    //What the hell?!
    fprintf(stderr, "Incorrect file!\n");
    return -1;
}
не хочет работать
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 17:06     Доработать пункт меню #8
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
а как еще сделать проверку что если в файле матрица не полностью заполнена
4
1 2 3 4
4 5 6 7
7 8 9 0
4 7
такая матрица то ошибка?
Ниже код на Си извещающий нас о том что матрица неполная.
Или нужен код который заранее скажет что файл содержит неполные данные???
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
#include <stdio.h> //(f)printf (f)scanf
#include <stdlib.h>//malloc system
 
int main()
{
    int i, j, n;
    int ** arr;
    FILE * f = fopen("matrix.txt","r");
    if(!f)
        printf("Error open matrix.txt\n");
    else
    {
        fscanf(f,"%d",&n);
        //ГќГІГ® âûäåëåГ*ГЁГҐ ГЇГ*ìÿòè Гў ñòèëå Ñè
        //åñëè õîòèòå ñóðæèê ГЇГЁГёГЁГІГҐ
        //arr = new int * [n];
        arr = (int **)malloc(n*sizeof(int *));
        for(i = 0; i < n; i++)
        {
            arr[i] = (int *)malloc(n*sizeof(int));
            for(j = 0; j < n; j++)
            {
                if(feof(f))
                {
                    printf("\nMatrix in file not complete!\n");
                    break;
                }
                fscanf(f,"%d",&arr[i][j]);
                printf(  "%d ",arr[i][j]);
            }
            printf("\n");
        }
        fclose(f);
    }
    system("pause");
    return 0;
}
matrix.txt
4
1 2 3 4
4 5 6 7
7 8 9 0
4 7
Миниатюры
Доработать пункт меню  
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 17:09  [ТС]     Доработать пункт меню #9
да нужен,что если данныз не зватает пишет еррор и закрывает программу
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 17:16     Доработать пункт меню #10
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
да нужен,что если данныз не зватает пишет еррор и закрывает программу
- дык уберите
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf( *"%d ",arr[i][j]);
в моем коде и введите флаг для этого
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(feof(f))
после выхода из цикла если флаг сигнализировал что преждевременно достигли конца файла просто не передаём матрицу
дальше, а закріваем программу.
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
matrica(matr,n);//функция вывода матрицы на консоль
* * * * * * * * * * maxsum(matr,n);//функция поиска максимальной среди сумм
Это наиболее просто, если же не хотим создавать
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
arr = (int **)malloc(n*sizeof(int *));
до того как убедимся что матрица полная читаем в buf переменную + считаем число считываний k если k < n*n то матрица неполная.
Думаю всё изложенное натолкнёт Вас на мысль, если нет жду постов в топике
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 17:30  [ТС]     Доработать пункт меню #11
была бы последняя мысль в коде,было бы отлично
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 17:50     Доработать пункт меню #12
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
была бы последняя мысль в коде,было бы отлично
- Хорошо, пробуйте
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
#include <stdio.h> //(f)printf (f)scanf
#include <stdlib.h>//malloc system
 
//Ïðîâåðÿåò ñîäåðæèòñÿ ëè Гў ГґГ*éëå
//ïîëГ*Г*Гї Г¬Г*òðèöГ*, åñëè ВєГІГ® ГІГ*ГЄ âîçâðГ*ГІ 0
//åñëè Г*ГҐГІ âîçâðГ*ГІ ëþáîå Г*ГҐГ*óëåâîå Г§Г*Г*Г·ГҐГ*ГЁГҐ
int isCorrectFile(FILE *f, int &n)
{
    int i, j;
    int buf, k = 0;
    if(!fscanf(f,"%d",&n))
        n = -1;
    else    
    for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
    {
        //ГЊГ*ëî ºëåìåГ*òîâ
        if(feof(f))
            break;
        //ГЌГҐ ГіГ¤Г*ëîñü Г±Г·ГЁГІГ*ГІГј ýëåìåГ*ГІ
        if(!fscanf(f,"%d",&buf))
            break;
        k++;//Г±Г·ВёГІГ·ГЁГЄ Г·ГІГҐГ*ГЁГ©
    }
    fseek(f,0,SEEK_SET);//ÂåðГ*óëè êóðñîð ГўГ*Г*Г·Г*ëî ГґГ*éëГ*
    return n*n - k + 1;
}
 
 
int main()
{
    int i, j, n;
    int ** arr;
    FILE * f = fopen("matrix.txt","r");
    if(!f)
        printf("Error open matrix.txt\n");
    else
    {
        if((i = isCorrectFile(f, n)) != 0)
        {
            if(n == -1)
                printf("Cant read num of elements\n");
            else
                printf("Matrix hasn't %d elements\n",i);
        }
        else
        {
            //ГќГІГ® âûäåëåГ*ГЁГҐ ГЇГ*ìÿòè Гў ñòèëå Ñè
            //åñëè õîòèòå ñóðæèê ГЇГЁГёГЁГІГҐ
            //arr = new int * [n];
            arr = (int **)malloc(n*sizeof(int *));
            for(i = 0; i < n; i++)
            {
                arr[i] = (int *)malloc(n*sizeof(int));
                for(j = 0; j < n; j++)
                {
                    if(feof(f))
                    {
                        printf("\nMatrix in file not complete!\n");
                        break;
                    }
                    fscanf(f,"%d",&arr[i][j]);
                    printf(  "%d ",arr[i][j]);
                }
                printf("\n");
            }
        }
        fclose(f);
    }
    system("pause");
    return 0;
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 18:09  [ТС]     Доработать пункт меню #13
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
using namespace std;
 
void maxsum(int **matr, int n)//функция поиска максимальной среди сумм
{
    int i,j, max = 0,sum = 0,index,dlina;
    dlina = 1;//длина самой короткой побочной диагонали
    index = n - 1;//номер "стартового" (для подсчета) столбца нулевой строки в первом цикле for() и "стартовой" строки для нулевого столбца во втором цикле for()
    while(index)
    {
        for(i = 0,j = index; i < dlina; ++i, ++j)//перемещаемся прямо по диагонали до тех пор, пока не исчерпана длина диагонали dlina
            sum += matr[i][j];
        if (max < sum)//проверяем значение sum с имеющимся маскимумом
        {
            max = sum;
        }
        sum = 0;
        for(i = 0, j = index; i < dlina; ++i, ++j)//перемещаемся прямо по диагонали до тех пор, пока не исчерпана длина диагонали dlina
            sum += matr[j][i];
        if (max < sum) //проверяем значение sum с имеющимся маскимумом
        {
            max = sum;
        }
        sum = 0;
        ++dlina;//увеличиваем размер диагонали на 1
        --index;//"стартовый" индекс index уменьшаем на 1 и так до тех пор, пока index не равен 0
    }
    cout<<"maximum =  "<<max<<endl<<endl;
    return;
}
 
void matrica(int **matr, int n)//функция вывода матрицы на консоль
{
    int i,j;
    cout<<"\nMatrica A\n\n";
    for (i = 0; i < n; i++)//Вывод результата
    {
        for (j = 0; j < n; j++)
        {
            cout << matr[i][j] << " ";
        }
        cout<<endl;
    }
    cout<<endl;
    return;
}
 
int main(int argn, char** argv)
{
    setlocale(LC_ALL,"Rus");//русский язык
    int menu,n,i,j;
    cout<<"Выберете вариант ввода\n\n";
    cout<<"\t1.Ввод вручную\n";
    cout<<"\t2.Из файла\n\n";
    cout<<"Ваш вариант: ";
    cin>>menu;    
    switch(menu)
    {
             case 1:{
                  cout<<"Введите порядок матриц:\n";
                  cout<<"n = "; 
                  cin>>n;
                
                        int **matr=new int *[n];
                  for (i=0;i<n ;i++)
                  {
                       matr[i]=new int[n]; 
                       for (j=0;j<n ;j++)
                                      {
                                      cout<<"A["<<i+1<<"]["<<j+1<<"] = " ;
                                      cin>>matr[i][j];
                                      }
                  }
                  matrica(matr,n);//функция вывода матрицы на консоль
                  maxsum(matr,n);//функция поиска максимальной среди сумм
                  for(int i = 0; i < n; i++) {
                  delete[] matr[i];}                               
                  delete[] matr;
                  break;}
             case 2:{
                  char nameInput[30];
                  cout<<"Введите имя файла: ";
                  cin>>nameInput;
                  FILE *f1=fopen(nameInput,"r");
                  while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
                  {
                        cout<<"\tОшибка открытия файла!\n";
                        cout<<"Введите имя файла: ";   //спрашиваешь имя
                        cin>>nameInput;           //считываешь имя
                        f1 = fopen(nameInput,"r");//открытие файла1
                  }
                  fscanf(f1, "%d", &n);
                  int **matr=new int *[n];       
                  for (i=0;i<n ;i++)
                  {
                       matr[i]=new int[n];           
                       for (j=0;j<n ;j++)
                         if(feof(f1))
                                {
                                        printf("\nMatrix in file not complete!\n");
                                        break;
                                }
                                else
                                {
                            fscanf (f1,"%d ",&matr[i][j]);}
                  }
 
                   matrica(matr,n);//функция вывода матрицы на консоль
                    maxsum(matr,n);//функция поиска максимальной среди сумм
                    for(int i = n - 1; 0 <= i; i--) {
                          delete[] matr[i];          }                     
                  delete[] matr;
                 break;}
                 default:{cout<<"\nНеточный ввод номера!";break;}
    }    
getch();
}
Можешь вставить конкретно мне в исходник,уже голова не думает,вот полностью весь мой исходник
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 18:27     Доработать пункт меню #14
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
Можешь вставить конкретно мне в исходник,уже голова не думает,вот полностью весь мой исходник
- вставлял на быструю руку, но скомпилилось
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
#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;
 
//Ïðîâåðÿåò ñîäåðæèòñÿ ëè Гў ГґГ*éëå
//ïîëГ*Г*Гї Г¬Г*òðèöГ*, åñëè ВєГІГ® ГІГ*ГЄ âîçâðГ*ГІ 0
//åñëè Г*ГҐГІ âîçâðГ*ГІ ëþáîå Г*ГҐГ*óëåâîå Г§Г*Г*Г·ГҐГ*ГЁГҐ
int isCorrectFile(FILE *f, int &n)
{
        int i, j;
        int buf, k = 0;
        if(!fscanf(f,"%d",&n))
                n = -1;
        else    
        for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
        {
                //ГЊГ*ëî ºëåìåГ*òîâ
                if(feof(f))
                        break;
                //ГЌГҐ ГіГ¤Г*ëîñü Г±Г·ГЁГІГ*ГІГј ýëåìåГ*ГІ
                if(!fscanf(f,"%d",&buf))
                        break;
                k++;//Г±Г·ВёГІГ·ГЁГЄ Г·ГІГҐГ*ГЁГ©
        }
        fseek(f,0,SEEK_SET);//ÂåðГ*óëè êóðñîð ГўГ*Г*Г·Г*ëî ГґГ*éëГ*
        return n*n - k + 1;
}
 
void maxsum(int **matr, int n)//ГґГіГ*êöèÿ ïîèñêГ* Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îé ñðåäè ñóìì
{
    int i,j, max = 0,sum = 0,index,dlina;
    dlina = 1;//äëèГ*Г* Г±Г*ìîé êîðîòêîé ïîáî÷Г*îé äèГ*ГЈГ®Г*Г*ëè
    index = n - 1;//Г*îìåð "Г±ГІГ*ðòîâîãî" (äëÿ ïîäñ÷åòГ*) ñòîëáöГ* Г*óëåâîé ñòðîêè Гў ïåðâîì öèêëå for() ГЁ "Г±ГІГ*ðòîâîé" ñòðîêè äëÿ Г*óëåâîãî ñòîëáöГ* ГўГ® âòîðîì öèêëå for()
    while(index)
    {
        for(i = 0,j = index; i < dlina; ++i, ++j)//ïåðåìåùГ*åìñÿ ïðÿìî ГЇГ® äèГ*ГЈГ®Г*Г*ëè äî ГІГҐГµ ïîð, ïîêГ* Г*ГҐ èñ÷åðïГ*Г*Г* äëèГ*Г* äèГ*ГЈГ®Г*Г*ëè dlina
            sum += matr[i][j];
        if (max < sum)//ïðîâåðÿåì Г§Г*Г*Г·ГҐГ*ГЁГҐ sum Г± èìåþùèìñÿ Г¬Г*ñêèìóìîì
        {
            max = sum;
        }
        sum = 0;
        for(i = 0, j = index; i < dlina; ++i, ++j)//ïåðåìåùГ*åìñÿ ïðÿìî ГЇГ® äèГ*ГЈГ®Г*Г*ëè äî ГІГҐГµ ïîð, ïîêГ* Г*ГҐ èñ÷åðïГ*Г*Г* äëèГ*Г* äèГ*ГЈГ®Г*Г*ëè dlina
            sum += matr[j][i];
        if (max < sum) //ïðîâåðÿåì Г§Г*Г*Г·ГҐГ*ГЁГҐ sum Г± èìåþùèìñÿ Г¬Г*ñêèìóìîì
        {
            max = sum;
        }
        sum = 0;
        ++dlina;//óâåëè÷èâГ*ГҐГ¬ Г°Г*çìåð äèГ*ГЈГ®Г*Г*ëè Г*Г* 1
        --index;//"Г±ГІГ*ðòîâûé" ГЁГ*äåêñ index óìåГ*ГјГёГ*ГҐГ¬ Г*Г* 1 ГЁ ГІГ*ГЄ äî ГІГҐГµ ïîð, ïîêГ* index Г*ГҐ Г°Г*ГўГҐГ* 0
    }
    cout<<"maximum =  "<<max<<endl<<endl;
    return;
}
 
void matrica(int **matr, int n)//ГґГіГ*êöèÿ âûâîäГ* Г¬Г*òðèöû Г*Г* ГЄГ®Г*ñîëü
{
    int i,j;
    cout<<"\nMatrica A\n\n";
    for (i = 0; i < n; i++)//Âûâîä ðåçóëüòГ*ГІГ*
    {
        for (j = 0; j < n; j++)
        {
            cout << matr[i][j] << " ";
        }
        cout<<endl;
    }
    cout<<endl;
    return;
}
 
int main(int argn, char** argv)
{
    setlocale(LC_ALL,"Rus");//ðóññêèé ÿçûê
    int menu,n,i,j;
    int **matr;
    FILE *f1;
    char nameInput[30];
    cout<<"Âûáåðåòå ГўГ*ðèГ*Г*ГІ ââîäГ*\n\n";
    cout<<"\t1.Ââîä âðó÷Г*ГіГѕ\n";
    cout<<"\t2.Èç ГґГ*éëГ*\n\n";
    cout<<"Г‚Г*Гё ГўГ*ðèГ*Г*ГІ: ";
    cin>>menu;    
    switch(menu)
    {
             case 1:
                  cout<<"Ââåäèòå ïîðÿäîê Г¬Г*òðèö:\n";
                  cout<<"n = "; 
                  cin>>n;
                
                  matr=new int *[n];
                  for (i=0;i<n ;i++)
                  {
                       matr[i]=new int[n]; 
                       for (j=0;j<n ;j++)
                                                          {
                                      cout<<"A["<<i+1<<"]["<<j+1<<"] = " ;
                                      cin>>matr[i][j];
                                                                          }
                  }
                  matrica(matr,n);//ГґГіГ*êöèÿ âûâîäГ* Г¬Г*òðèöû Г*Г* ГЄГ®Г*ñîëü
                  maxsum(matr,n);//ГґГіГ*êöèÿ ïîèñêГ* Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îé ñðåäè ñóìì
                  for(i = 0; i < n; i++) {
                  delete[] matr[i];}                               
                  delete[] matr;
                  break;
             case 2:
                  
                  cout<<"Ââåäèòå èìÿ ГґГ*éëГ*: ";
                  cin>>nameInput;
                  f1=fopen(nameInput,"r");
                  while (f1 == NULL)//öèêë îò îøèáîê,åñëè Г*ГҐ Г±ГіГ№ГҐГўГ±ГІГўГіГҐГІ ГґГ*éëГ*1
                  {
                        cout<<"\tГЋГёГЁГЎГЄГ* îòêðûòèÿ ГґГ*éëГ*!\n";
                        cout<<"Ââåäèòå èìÿ ГґГ*éëГ*: ";   //Г±ГЇГ°Г*ГёГЁГўГ*ГҐГёГј èìÿ
                        cin>>nameInput;           //ñ÷èòûâГ*ГҐГёГј èìÿ
                        f1 = fopen(nameInput,"r");//îòêðûòèå ГґГ*éëГ*1
                  }
                  if((i = isCorrectFile(f1, n)) != 0)
                {
                        if(n == -1)
                                printf("Cant read num of elements\n");
                        else
                                printf("Matrix hasn't %d elements\n",i);
                }
                else
                {
                  matr=new int *[n];       
                  for (i=0;i<n ;i++)
                  {
                       matr[i]=new int[n];           
                       for (j=0;j<n ;j++)
                            fscanf (f1,"%d ",&matr[i][j]);
                  }
 
                   matrica(matr,n);//ГґГіГ*êöèÿ âûâîäГ* Г¬Г*òðèöû Г*Г* ГЄГ®Г*ñîëü
                    maxsum(matr,n);//ГґГіГ*êöèÿ ïîèñêГ* Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îé ñðåäè ñóìì
                    for(int i = n - 1; 0 <= i; i--) {
                          delete[] matr[i];          }                     
                  delete[] matr;
                }
                 break;
                 default:cout<<"\nÍåòî÷Г*ûé ââîä Г*îìåðГ*!";break;
    }    
    getch();
    return 0;
}
Добавлено через 1 минуту
Чуть от себя

Не по теме:

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
case 2:{
- не нужно в лєйблах ещё и скобки писать

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
char nameInput[30];
- объявлять переменные нужно до switch - мой компилятор ругался на объявление переменной в лэйбле

a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 18:33  [ТС]     Доработать пункт меню #15
храняится в файле
4
1 2 3 4
4 5 6 7
7 8 9 0
4 7 8 4
запускаю 2 пункт ввожу имя файла ,пишет Matrix hasn't 1 elements,должна матрицу показываит,или матрица в текстовике не правильно задана?
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 18:57     Доработать пункт меню #16
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
запускаю 2 пункт ввожу имя файла ,пишет Matrix hasn't 1 elements,должна матрицу показываит,или матрица в текстовике не правильно задана?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
return n*n - k + 1;
- убери +1 return n*n - k
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
01.11.2011, 19:06  [ТС]     Доработать пункт меню #17
спасиб тебе,все прекрасно работает.
Как прдеотвоатить крах программы при введенной размерности 9999999999999999999999999 или что то подобного?
это касается первого пункта
-=ЮрА=-
Заблокирован
Автор FAQ
01.11.2011, 20:43     Доработать пункт меню #18
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
спасиб тебе,все прекрасно работает.
Как прдеотвоатить крах программы при введенной размерности 9999999999999999999999999 или что то подобного?
это касается первого пункта
пиши так
C++
1
2
3
4
5
6
7
double size;
cin>>size;
if(INT_MAX < size)
    cout<<"Value is not integer\n";
else
{//делай свои действия
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
02.11.2011, 09:19  [ТС]     Доработать пункт меню #19
C++
1
2
3
4
5
6
7
8
9
10
11
 {
  try
  {
    int* myarray= new int[10000];
  }
  catch (bad_alloc& ba)
  {
    cerr << "bad_alloc caught: " << ba.what() << endl;
  }
  return 0;
}
а как бы через этот код?

или лучше черех этот
C++
1
2
3
4
5
6
7
8
throw bad_alloc();
 
int * m =0;
try {
    m = new int[n];
} catch (bad_alloc x) {
    ....
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 12:02     Доработать пункт меню
Еще ссылки по теме:

объясните пожалусто каждый пункт C++
C++ Подскажите, пожалуйста, люди добрые, как заменить первый пункт меню на функцию. Заранее спасибо
Успеет ли мотоциклист прибыть в пункт назначения? C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
02.11.2011, 12:02     Доработать пункт меню #20
a.n.o.n.i.m, тут вся суть проверки сводится удалось ли выделить память
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
программы при введенной размерности 9999999999999999999999999
- это подразумевало проверку предполагаемого числа элементов, лучше делать её чем лишний раз напрягать ОС пожирая огромный блок памяти а потом выплёвывая его при некорректном выделении. Вообщем зачем что то делать если по самой размерности можно сказать что этого лучше не делать, к этому веду
Yandex
Объявления
02.11.2011, 12:02     Доработать пункт меню
Ответ Создать тему
Опции темы

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