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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
#1

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

01.11.2011, 13:22. Просмотров 1466. Ответов 39
Метки нет (Все метки)

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;}
Помогите доработать,к результате в окне что то не то
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доработать пункт меню (C++):

Добавить пункт в меню - C++
Подскажите пожалуйста. В Visual Studio 2010 создаю проект Win32. Когда просто компилирую выводится окно в котором в меню есть только пункты...

Заменить первый пункт меню на функцию - C++
Не могу заменить первый пункт меню на функцию. // 7.cpp: определяет точку входа для консольного приложения. // #include...

Надо чтоб при нажатии на свой пункт меню открывался новый док. - C++
Значит в MDI проекте, добовляю я свой пункт меню, и надо чтоб при нажатии на него открывался новый док, тоже что и File-&gt;New. Подскажите...

3, 4, 5 пункт меню программы не совсем коретно работает. Хоть убей но ошибку не вижу( - C++
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;iomanip&gt; #include&lt;fstream&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; #include...

Как сделать, чтобы при запуске проги с параметрами, вызывался пункт меню соответствующий введенному параметру? - C++
Добрый день. есть простая консольная прога с меню. хочу, чтобы при запуске проги с параметрами вызывался пункт меню соответствующий...

"О программе" (пункт меню) - C++
Здрасти. В пункте меню &quot;о программе&quot; мне куда писать эту информацию, в самой программе? или записать в файл, а функцией...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор 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
1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
01.11.2011, 19:06  [ТС] #17
спасиб тебе,все прекрасно работает.
Как прдеотвоатить крах программы при введенной размерности 9999999999999999999999999 или что то подобного?
это касается первого пункта
0
-=ЮрА=-
Заблокирован
Автор 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
{//делай свои действия
}
1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
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) {
    ....
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.11.2011, 12:02 #20
a.n.o.n.i.m, тут вся суть проверки сводится удалось ли выделить память
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
программы при введенной размерности 9999999999999999999999999
- это подразумевало проверку предполагаемого числа элементов, лучше делать её чем лишний раз напрягать ОС пожирая огромный блок памяти а потом выплёвывая его при некорректном выделении. Вообщем зачем что то делать если по самой размерности можно сказать что этого лучше не делать, к этому веду
0
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
02.11.2011, 12:03  [ТС] #21
просто не понял куда твой код вписать,можешь пояснить?
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.11.2011, 12:06 #22

Не по теме:

Но если вам задание поставили обработка исключительных ситуаций, то это уже другое дело. Как звучит задание к данной работе???



Добавлено через 1 минуту
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
просто не понял куда твой код вписать,можешь пояснить?
- сейчас сделаю - ответь на мой вопрос, мы специально генерируем исключительную ситуацию или же просто нужно ввести так называемую "защиту от дурака"?
0
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
02.11.2011, 12:10  [ТС] #23
я вам отписал в пм
0
-=ЮрА=-
02.11.2011, 12:12
  #24

Не по теме:

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
я вам отписал в пм
- ок скоро проверю личку, если там всё будет понятно выложу код в топик...

1
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
02.11.2011, 15:30  [ТС] #25
ответь
0
-=ЮрА=-
02.11.2011, 15:47
  #26

Не по теме:

Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
ответь
- сейчас уже пишу код, подогодь трошки...

0
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
02.11.2011, 15:51  [ТС] #27
C++
1
2
3
4
5
6
7
8
9
 case 1:
                  cout<<"Введите порядок матриц:\n";
                  cout<<"n = ";
                  cin>>size;    
                  if(INT_MAX < size){
    cout<<"Value is not integer\n";}
else{       
            size=n;   
                  matr=new int *[n];
я вот твой цикл попробывал,если много ввести то пишет ошибку норм,но если ввести нормальную размерность напрмер 3 бесконечно вводится матрица
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.11.2011, 16:02 #28
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch(menu)
    {
             case 1:
                 do
                 {
                      cout<<"Ââåäèòå ïîðÿäîê Г¬Г*òðèö:\n";
                      cout<<"n = "; 
                      cin>>dn;
                      if(INT_MAX < dn)
                          cout<<"ÂâåäåГ*Г*îå ÷èñëî ïðåâûøГ*ГҐГІ ïðåäåë "<<(n = INT_MAX)<<"\n";
                 }
                 while(INT_MAX < dn);
                      
                  n = int(dn);
                  matr=new int *[n];
для INT_MAX подключите #include <limits.h> так на всякий случай, скрин нужной части данного хедера прилагаю
1
Миниатюры
Доработать пункт меню  
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
02.11.2011, 16:06  [ТС] #29
а dn следует вначале обьявит тип double или int?

робит норм,но если ввести 9 знаков 1000000000 вылетает))
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.11.2011, 16:10 #30
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
а dn следует вначале обьявит тип double или int?
- ах ну да я ж верхушку кода не привёл, вот

весь код
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
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <limits.h>
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;
    double dn;
    int **matr;
        FILE *f1;
        char nameInput[30];
    cout<<"Âûáåðåòå ГўГ*ðèГ*Г*ГІ ââîäГ*\n\n";
    cout<<"\t1.Ââîä âðó÷Г*ГіГѕ\n";
    cout<<"\t2.Èç ГґГ*éëГ*\n\n";
    cout<<"Г‚Г*Гё ГўГ*ðèГ*Г*ГІ: ";
    cin>>menu;    
    switch(menu)
    {
             case 1:
                 do
                 {
                      cout<<"Ââåäèòå ïîðÿäîê Г¬Г*òðèö:\n";
                      cout<<"n = "; 
                      cin>>dn;
                      if(INT_MAX < dn)
                          cout<<"ÂâåäåГ*Г*îå ÷èñëî ïðåâûøГ*ГҐГІ ïðåäåë "<<(n = INT_MAX)<<"\n";
                 }
                 while(INT_MAX < dn);
                      
                  n = int(dn);
                  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;
}


Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
int main(int argn, char** argv)
{
* * setlocale(LC_ALL,"Rus");//русский язык
* * int menu,n,i,j;
* * * * double dn;
* * int **matr;
* * * * FILE *f1;
* * * * char nameInput[30];
* * cout<<"Выберете вариант ввода\n\n";
- вон он dn затесался между int menu,n,i,j; и int **matr;

Не по теме:

PS:a.n.o.n.i.m, не забывайте на объявление переменных в лэйблах ругается компилятор.

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 16:10
Привет! Вот еще темы с ответами:

почему то не переводит на другую строку cout << "введенный пункт назначения:" << a[i].pn << ' ' ; cout << "введенный пункт назначения:" << a[i].num - C++
struct Train { char pn ; unsigned int num; char time ; }; void Copy (Train &amp;pest, Train bust) //Вспомогательная функция...

объясните пожалусто каждый пункт - C++
Реализовать программу демонстрирующую решение поставленной задачи. Необходимо соблюсти условия перечисленные ниже. 1. Ввод исходных...

Успеет ли мотоциклист прибыть в пункт назначения? - C++
мотоциклист должен прибыть в город через T часов после выезда из пункта находящемуся на расстоянии S кем от города. Успеет ли он вовремя...

Разработать программу, в которой будет организовано меню, выбор функций меню - C++
Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.11.2011, 16:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru