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

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

Войти
Регистрация
Восстановить пароль
 
MarLuckDen
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 2
#1

Не получается найти ошибки в программе(среда разработки - VS 2005) - C++

12.06.2014, 21:42. Просмотров 181. Ответов 3
Метки нет (Все метки)

Задача заключается в следующем: Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы массива, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, сцепление двух массивов с исключением повторяющихся элементов, вывод на экран элемента массива по заданному индексу и всего массива.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Листинг:
Основной файл программы:
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
#include "StdAfx.h"
#include "Massiv.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
void main()
{
 Massiv a,b;
 int number,punkt,rec,field,kol,n1,n2,n,n3,n4;
 
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 while (punkt!=7)
 {
 switch(punkt)
 {
 case 1: {    //sozdanie massiva
 a.Vvod_Sl();
 cout<<endl;
 a.Print();
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 }
 break;
 case 2: {a.Print(); //pechat massiva
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt; }
 break;
 case 3: { //pechat stroki po indeksu
 cout<<"Vvedite nomer massiva (numeracia s 0!): ";cin>>number;
 cout<<endl;
 a.Print_2(number);
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;
 }
 break;
 case 4: {  //sceplenie dvuh massivov
 cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n1;cout<<endl;
 cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n2;cout<<endl;
 a.Scepl(n1,n2);
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 case 5: {  //sliyanie dvuh massivov
 cout<<"Vvrdite nomer 1-go massiva(numeracia s 0!): ";cin>>n3;cout<<endl;
 cout<<"Vvedite nomer 2-go massiva(numeracia s 0!): ";cin>>n4;cout<<endl;
 a.Sliyan(n3,n4);
 cout<<endl;
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 
 case 6: {  //pechat konkretnogo elementa konkretnoi stroki
 cout<<"Vvedite nomer stroki massiva(numeraciya s 0!): ";cin>>rec;
 cout<<endl;
 cout<<"Vvedite nomer stolbca: ";cin>>field;
 cout<<endl;
 a.Print_3(rec,field);
 cout<<"1 - sozdanie massiva";cout<<endl;
 cout<<"2 - pechat vseh strok";cout<<endl;
 cout<<"3 - pechat stroki po indeksu";cout<<endl;
 cout<<"4 - sceplenie dvuh massivov";cout<<endl;
 cout<<"5 - sliyanie dvuh massivov";cout<<endl;
 cout<<"6 - pechat konkretnogo elementa konkretnoi stroki";cout<<endl;
 cout<<"7 - vihod";cout<<endl;
 cout<<"Vvedite punkt menu "; cin>> punkt;}
 break;
 case 7:
 break;
 }
 }
 }
Заголовочный файл класса Massiv.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <conio.h>
 
 
class Massiv
{
 int *a,*b,n,min;
 public:
 void Sozd();
 void Vvod_Sl();
 void Scepl(int n1, int n2);
 void Sliyan(int n3, int n4);
 void Print();
 void Print_2(int number);
 void Print_3(int rec, int field);
};
Massiv.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
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
#include "StdAfx.h"
#include "Massiv.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <stdlib.h>
 
 
using namespace std;
 
void Massiv :: Sozd()
{
int m;
 cout<<"kolvo strok?";cin>>n;
 int min=0;
 for (int i=0;i<n;i++)
 {
 cout<<"kolvo elementov v "<< i+1 <<" stroke?";cin>>m;
 *(b+i)=m;
 if (min<m) {min=m;}
 }
a=(int*)malloc(sizeof(int)*n*min);
}
void Massiv::Vvod_Sl()
{
 Sozd();
 for (int i=0;i<n;i++)
 for (int j=0; j<*(b+i); j++)
 {
 *(a+i+j)=-20+rand()%40;
 }
}
void Massiv :: Print()
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
void Massiv :: Print_2(int number)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if (i==number) cout<<setw(6)<<*(a+i+j);
 }
 cout<<endl;
 }
}
 
void Massiv :: Print_3(int rec, int field)
{
 for(int i=0;i<n;i++)
 {
 for (int j=0; j<*(b+i);j++)
 {
 if ((i==rec)&&(j==field)) cout<<"Danii element= "<<setw(6)<<*(a+i+j);
 else "Massiv s takimi dannimi ne naiden!";
 }
 cout<<endl;
 }
}
 
void Massiv :: Scepl(int n1,int n2)
{
 int m1,m2,k,j,l,p;
 int c[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n1);
 m2=*(b+n2);
 // *(b+n1)=m1+m2;
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 if(l<m1)
 {c[l]=*(a+n1+l);
 cout<<setw(6)<<c[l];
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n2+k);
 cout<<setw(6)<<c[l];
 k++;
 }
}
void Massiv :: Sliyan(int n3,int n4)
{
 int m1,m2,k,j,l,p,l1;
 int c[20],f[20];
 //zapominaem kolvo elementov v strokah
 m1=*(b+n3);
 m2=*(b+n4);
 int m3=m1+m2;
 k=0;
 for (l=0;l<m3;l++)
 {
 if(l<m1)
 {c[l]=*(a+n3+l);
 }
 else if((l>=m1)&&(l<m3))
 {
 c[l]=*(a+n4+k);
 k++;
 }
 }
 l1=0;
 f[l1]=c[l1];
 cout<<setw(6)<<f[l1];
 //sliyanie
 for(p=1;p<m3;p++)
 if(f[l1]!=c[p])
 { l++;
 f[l1]=c[p];
 cout<<setw(6)<<f[l1];
 }
}
Во время запуска программы компилятор ошибки не выдает, но при попытке создания массива в программе получаю в окне вывода отладки следующее:
Первый экземпляр исключения в "0x76bfc41f" в "console.exe": Исключение Microsoft C++: [rethrow] по адресу 0x00000000..
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
первое исключение типа "System.AccessViolationException" произошло в mscorlib.dll
И это циклично повторяется раз двадцать, после чего вылетает эта же ошибка. Сам массив не выводится.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 21:42     Не получается найти ошибки в программе(среда разработки - VS 2005)
Посмотрите здесь:

Среда разработки - C++
Здраствуйте, подскажите где лучше писать С++, на какой программе?

Среда разработки - C++
Всем доброго времени суток. Народ посоветуйте в какой среде следует начать программирование на С++. Сейчас очень много всяких сред...

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

Среда разработки. Дайте совет - C++
Подскажите пожалуйста такой момент: я только изучаю ооп, так что пишу под консоль. Сейчас пользуюсь MVS.Все хорошо, но напрягает количество...

Среда разработки завершает работу - C++
Программа должна создавать дерево поиска, и считать кол-во листьев. Но вместо этого она завершает работу, что не так? #include...

Бесплатная русифицированная среда разработки - C++
Здравствуйте! Начал учить С++ и теперь понадобился компилятор для него на Windows. Кто-нибудь подскажите простой (максимально), бесплатный...

Среда разработки, работающая на os android - C++
Здравствуйте. Сейчас учусь на программиста(1 курс))) и есть некоторая необходимость таскать с собой ноутбук чтобы делать всяческие...

Среда разработки под windows7-x64 - C++
посоветуйте пожалуйста нормальную среду разработки под windows7-x64

Среда разработки (какая удобнее Вам?) - C++
Интересует чем лучше пользоваться на Elementary Os? К какой среде проще найти документацию? Чем сами пользуетесь?

Объясните общие моменты: среда разработки, библиотеки и т.п - C++
Хочу начать изучение С++. На примере написания какого-нибудь приложения для Windows, с окнами и графикой. У меня есть Вижуал-студия 2005,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,551
12.06.2014, 22:31     Не получается найти ошибки в программе(среда разработки - VS 2005) #2
это циклично повторяется раз двадцать, после чего вылетает эта же ошибка. Сам массив не выводится.
void Sozd(); использует b без инициализации. И вообще, заменить конструктором Massiv.
int *a,*b,n,min; - каждому полю структуры присвоить имя содержащее минимум одно слово описывающее смысл этого поля. По крайней мере, если вы собираетесь ходить по форумам спрашивая "а почему мой код не работает".
Больше assert для бога assert.
nmcf
5122 / 4442 / 1481
Регистрация: 14.04.2014
Сообщений: 17,640
12.06.2014, 22:31     Не получается найти ошибки в программе(среда разработки - VS 2005) #3
Почему нет конструктора класса? Для чего malloc(), если есть new?
Arukasa
3 / 3 / 1
Регистрация: 06.01.2013
Сообщений: 29
12.06.2014, 22:46     Не получается найти ошибки в программе(среда разработки - VS 2005) #4
C++
1
*(b+i) = m;
и что это такое? Оо"
C++
1
else "Massiv s takimi dannimi ne naiden!";
Старайтесь форматировать код

C++
1
2
3
4
5
6
Massiv::Massiv()
    : a(NULL)
    , b(NULL)
    , n(0)
    , min(0)
{};
Yandex
Объявления
12.06.2014, 22:46     Не получается найти ошибки в программе(среда разработки - VS 2005)
Ответ Создать тему
Опции темы

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