Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2018, 19:26   #1
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию Помогите ошибка( для индекса требуется массив или указатель).

Программа не доделанная, но хочу ввести количество сторон и чтобы я вводил длины этих сторон, а потом смог посчитать периметр.
Файл poligon.cpp
Код:
#include "StdAfx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "poligon.h"

using namespace std; 

double P = 0;
int side[],number;
int side1;
int i;

void polygon::EnterParam()
{	
		cout << "Введите количество сторон:" << endl;
		cin >> number;
		cout << "Введите длины сторон: ";
		for (int i(0); i < number; i++)
		{
		     cin >> side[i];
		}
	} 

void regular_polygon::EnterParam1()
{	
	cout << "Введите количество сторон:(от 3 до 6) " << endl;
	cin >> number;
	if (3<=number<=6)
	{
	cout << "Введите длину стороны: ";
	cin >> side1;
	}
	else
	{
		cout << "Введите повторно количество сторон:(от 3 до 6)";
		cin >> number;
	}
	
}

/*void Polygon::DisplayParam()
{
	
}*/

double polygon::perimeter()
{
	for (int i(0); i < number; i++)
	{
		P+=side[i];
	}
	return P;
}

double regular_polygon::perimeter1()
{
	P=number*side1;
	return P;
}
Код:
Main.cpp
/*Создать базовый класс «многоугольник», описав в нём функции задания количества и длин сторон, вывода параметров многоугольника на экран,нахождения периметра.
Породить от него класс «правильный многоугольник» с числом вершин 3<=N<=6, переопределив в нём функции задания количества и длин сторон и нахождения периметра.*/
#include "stdafx.h"
#include <iostream>
#include <locale.h> 
#include <stdio.h>
#include <conio.h>
#include "poligon.h"

using namespace std; 

int main()

{
	polygon el;
	regular_polygon colel;
	regular_polygon *pell;//указатель нужен для реализации полиморфизма
	polygon *pel; //указатель нужен для реализации полиморфизма
	int key1,key2;
	setlocale(0,"RUS");
	do //выбирaем вид 
	{
	printf("\n1 - обычный многоугольник\n");
	printf("2 - правильный многоугольник\n");
		printf("ESC - выход\n");
		printf("Ваш выбор: \n");
		key1=getch();
		switch(key1)
		{
		case '1':
			pel=&el;
			break;
		case '2':
			pel=&colel;
			break;
		}
		if(key1!=27){
		if (key2=1)
		{
			do //выбираем действие для выбранного типа многоугольника
			{
				printf("\n1 - ввод параметров\n");
				printf("2 - вывод параметров\n");
				printf("3 - посчитать периметр\n");
				printf("ESC - выход\n");
				printf("Ваш выбор: \n");
				key2=getch();
				switch(key2)
				{
				case '1': pell->EnterParam1(); break;
				case '2': pell->DisplayParam(); break;
				case '3': printf("Периметр равен: %.2lf\n",pell->perimeter1());
				break;
				}
			}
			while(key2!=27);
		}

		if (key1=2)
		{
			do //выбираем действие для выбранного типа многоугольника
			{
				printf("\n1 - ввод параметров\n");
				printf("2 - вывод параметров\n");
				printf("3 - посчитать периметр\n");
				printf("ESC - выход\n");
				printf("Ваш выбор: \n");
				key2=getch();
				switch(key2)
				{
				case '1': pel->EnterParam(); break;
				case '2': pel->DisplayParam(); break;
				case '3': printf("Периметр равен: %.2lf\n",pel->perimeter());
					break;
				}
			}
			while(key2!=27);
		}
	}
	}
	while(key1!=27);
	return 0;
}
poligon.h
Код:
class polygon
{
protected: //должны быть напрямую доступны для класса-потомка
public:
	polygon(){};
	~polygon(){};
	virtual void EnterParam(); //ввод параметров
	virtual void DisplayParam(){}; //вывод параметров
	double perimeter(); //нахождение периметра; невиртуальная, так как не переопределяется в классе-потомке
};

class regular_polygon: public polygon
{
public:
	regular_polygon(){};
	~regular_polygon(){};
	virtual void EnterParam1();
	virtual void DisplayParam1(){};
	double perimeter1();
};

Последний раз редактировалось Lucky_Vadim; 26.03.2018 в 21:15. Причина: Изменение некоторых строк
Lucky_Vadim вне форума Ответить с цитированием
Старый 26.03.2018, 20:38   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так сделайте side массивом. Проблема в чем?
p51x вне форума Ответить с цитированием
Старый 26.03.2018, 21:16   #3
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

(Ошибка-1 неразрешенных внешних элементов)-в чём теперь беда?
Lucky_Vadim вне форума Ответить с цитированием
Старый 26.03.2018, 21:40   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Значит что-то объвили, а не реализовали или необходимую либу не подключили. Читайте сообщение об ошибке полностью.
p51x вне форума Ответить с цитированием
Старый 26.03.2018, 21:46   #5
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

это всё что написано, даже не показывается строка, в которой ошибка
Lucky_Vadim вне форума Ответить с цитированием
Старый 26.03.2018, 21:56   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Какая ИДЕ? Покажите скрин.
p51x вне форума Ответить с цитированием
Старый 26.03.2018, 22:24   #7
Ksonix
Пользователь
 
Регистрация: 23.01.2018
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Lucky_Vadim Посмотреть сообщение
int side[],number; int side1; int i; void polygon::EnterParam() { cout << "Введите количество сторон:" << endl; cin >> number; cout << "Введите длины сторон: "; for (int i(0); i < number; i++) { cin >> side[i]; }
надо задать количество элементов массива side
или работать динамическим массивом

int side[] //массив не инсталлирован

Последний раз редактировалось Ksonix; 26.03.2018 в 22:27.
Ksonix вне форума Ответить с цитированием
Старый 28.03.2018, 14:31   #8
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

Выводит ошибку Необработанное исключение в "0x01231d16" в "Л.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000".(На шаге выбора "Ввода параметров для любого вида многоугольников")
Вот так теперь выглядит main.cpp
Код:
/*Создать базовый класс «многоугольник», описав в нём функции задания количества и длин сторон, вывода параметров многоугольника на экран,нахождения периметра.
Породить от него класс «правильный многоугольник» с числом вершин 3<=N<=6, переопределив в нём функции задания количества и длин сторон и нахождения периметра.*/
#include "stdafx.h"
#include <iostream>
#include <locale.h> 
#include <stdio.h>
#include <conio.h>
#include "poligon.h"

using namespace std; 

int main()

{
	polygon el;
	regular_polygon colel;
	regular_polygon *pell=0;//указатель нужен для реализации полиморфизма
	polygon *pel=0; //указатель нужен для реализации полиморфизма
	int key1,key2;
	setlocale(0,"RUS");
	do //выбирaем вид 
	{
	printf("\n1 - обычный многоугольник\n");
	printf("2 - правильный многоугольник\n");
		printf("ESC - выход\n");
		printf("Ваш выбор: \n");
		key1=getch();
		switch(key1)
		{
		case '1':
			do //выбираем действие для выбранного разного многоугольника
			{
				printf("\n1 - ввод параметров\n");
				printf("2 - вывод параметров\n");
				printf("3 - посчитать периметр\n");
				printf("ESC - выход\n");
				printf("Ваш выбор: \n");
				key2=getch();
				switch(key2)
				{
				case '1':pel->EnterParam(); break;
				//case '2':pel-> DisplayParam(); break;
				case '3': printf("Периметр равен: %.2lf\n",pel->perimeter());
				break;
				}
			}
			while(key2!=27);
			break;
		case '2':
			do //выбираем действие для выбранного правильного многоугольника
			{
				printf("\n1 - ввод параметров\n");
				printf("2 - вывод параметров\n");
				printf("3 - посчитать периметр\n");
				printf("ESC - выход\n");
				printf("Ваш выбор: \n");
				key2=getch();
				switch(key2)
				{
				case '1':pell->EnterParam1(); break;
				//case '2': pell->DisplayParam(); break;
				case '3': printf("Периметр равен: %.2lf\n",pell->perimeter1());
				break;
				}
			}
			while(key2!=27);
			break;
		}}while(key1!= 27);
	return 0;
}
А это
Код:
 int side[]
я заменил на
Код:
int side[20]={0}
Lucky_Vadim вне форума Ответить с цитированием
Старый 28.03.2018, 14:49   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Где что-нибудь присваивается указателям
Код:
	regular_polygon *pell=0;//указатель нужен для реализации полиморфизма
	polygon *pel=0; //указатель нужен для реализации полиморфизма
?
p51x вне форума Ответить с цитированием
Старый 28.03.2018, 17:55   #10
Lucky_Vadim
Пользователь
 
Регистрация: 12.12.2017
Сообщений: 22
По умолчанию

Вот теперь всё хорошо, а как сделать чтобы посчитало периметр, если я выбираю правильный многоугольник ?
main.cpp
Код:
/*Создать базовый класс «многоугольник», описав в нём функции задания количества и длин сторон, вывода параметров многоугольника на экран,нахождения периметра.
Породить от него класс «правильный многоугольник» с числом вершин 3<=N<=6, переопределив в нём функции задания количества и длин сторон и нахождения периметра.*/
#include "stdafx.h"
#include <iostream>
#include <locale.h> 
#include <stdio.h>
#include <conio.h>
#include "poligon.h"

using namespace std; 

int main()

{
	polygon pol;
	regular_polygon repol;
	polygon *pel;
	int key1,key2;
	setlocale(0,"RUS");
	do //выбирaем вид 
	{
	printf("\n1 - обычный многоугольник\n");
	printf("2 - правильный многоугольник(Ввод сторон от 3 до 6)\n");
		printf("ESC - выход\n");
		printf("Ваш выбор: \n");
		key1=getch();
		switch(key1)
		{
		case '1':
			pel=&pol;
			break;
		case '2':
			pel=&repol;
			break;
		}
			do //выбираем действие для выбранного разного многоугольника
			{
				printf("\n1 - ввод параметров\n");
				printf("2 - вывод параметров\n");
				printf("3 - посчитать периметр\n");
				printf("ESC - выход\n");
				printf("Ваш выбор: \n");
				key2=getch();
				switch(key2)
				{
				case '1':pel->EnterParam(); break;
				case '2':pel-> DisplayParam(); break;
				case '3': printf("Периметр равен: %.2lf\n",pel->perimeter());
				break;
				}
			}
			while(key2!=27);
		}while(key1!= 27);
	return 0;
}
poligon.cpp
Код:
#include "StdAfx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include "poligon.h"

using namespace std; 

double P = 0;
int side[20]={0},number;
int side1;
int i;

void polygon::EnterParam()
{	
		cout << "Введите количество сторон:" << endl;
		cin >> number;
		cout << "Введите длины сторон: " << endl;
		for (int i(0); i < number; i++)
		{
		     cin >> side[i];
		}
	} 

void polygon::DisplayParam()
{
   for (int i(0); i < number; i++)
   cout <<"Длины сторон:"<< side[i] << "\t"<< endl;
}


double polygon::perimeter()
{
	for (int i(0); i < number; i++)
	{
		P+=side[i];
	}
	return P;
}
void regular_polygon::EnterParam()
{	
cout << "Введите количество сторон:(от 3 до 6) " << endl;
cin >> number;
if(number1>3 || number1<6)
{
cout << "Введите длину стороны: ";
cin >> side1;
}
else
{
cout << "Введите повторно количество сторон:(от 3 до 6)";
cin >> number;
}

}
void regular_polygon::DisplayParam()
{
for (int i(0); i < number; i++)
cout <<"Длины сторон:"<< side1 << "\t"<< endl;
}
double regular_polygon::perimeter()
{
	P=number*side1;
	return P;
}
poligon.h
Код:
class polygon
{
protected: //должны быть напрямую доступны для класса-потомка
public:
	polygon(){};
	~polygon(){};
	virtual void EnterParam(); //ввод параметров
	virtual void DisplayParam(); //вывод параметров
	double perimeter(); //нахождение периметра; невиртуальная, так как не переопределяется в классе-потомке
};

class regular_polygon: public polygon
{
public:
	regular_polygon(){};
	~regular_polygon(){};
	virtual void EnterParam();
	virtual void DisplayParam();
	double perimeter();
};

Последний раз редактировалось Lucky_Vadim; 28.03.2018 в 18:59.
Lucky_Vadim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
javac не является внутренней или внешней командой. Ошибка довольно распространена, требуется Ваша помощь. 6epuMup Общие вопросы по Java, Java SE, Kotlin 9 25.07.2019 20:00
Помогите пожалуйста нужен калькулятор для 2 или 8 или 16 систем счисления Sergey777157 Помощь студентам 0 16.05.2016 19:53
массив Указатель на указатель fr0st1k123 Общие вопросы C/C++ 3 27.12.2015 18:06
Ошибка в коде программы (для индекса требуется массив или указатель). Язык Си Семижон Евгения Помощь студентам 7 20.01.2014 02:45