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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.09.2013, 23:36   #1
tkach_fcz
 
Регистрация: 10.09.2013
Сообщений: 7
Вопрос C++. Лабораторная. Попадание точки в закрашенную область

Здраствуйте, я только учусь писать программы на С++ и еще многих стандарнтых операторов не знаю

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

В ответ обещаю лучи добра, тепла и любви.

Цитата:
Вот задание:
Тема: Определение попадания точки с веденными координатами в заданную область.
Написать программу, которая вводит координаты точки x и y и значения R и определеляет попадает ли данная точка в заданную область и выводит введенные значения и результат в виде: (пример) Точка с координатами x=2.65 , y=7.12 и R=3 попала в область.

При этом ввод исходных значений и вывод результата должен повторяться до тех пор, пока не будет введена комбинация клавиш <ctrl><z>, что является признаком конца ввода.

ссылка на задание
заранее спасибо.

Последний раз редактировалось tkach_fcz; 11.09.2013 в 00:45.
tkach_fcz вне форума
Старый 10.09.2013, 23:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
предупреждение, ссылка на фотографию вконтакте
ссылка на задания. рисунок под номер 16
не хочу Вас расстраивать, но извне доступа к вашей картинке-заданию нет!
лучше выложить картинку на соответствующий хостинг, и вставить ссылку в сообщение...

p.s. а вообще все эти задачи на попадание точки в область решаются одинаково - область разбивается на ряд отрезков или примитивов, для каждого задаётся уравнения отрезков(или примитивов). потом пишете if(проверка соответствия точки всем уравнениям) { точка принадлежит области} else {не, не попали...}
Serge_Bliznykov вне форума
Старый 10.09.2013, 23:52   #3
tkach_fcz
 
Регистрация: 10.09.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не хочу Вас расстраивать, но извне доступа к вашей картинке-заданию нет!
лучше выложить картинку на соответствующий хостинг, и вставить ссылку в сообщение...
не расстроили, учту, сейчас перезагружу картинку.
Цитата:
все эти задачи на попадание точки в область решаются одинаково - область разбивается на ряд отрезков или примитивов, для каждого задаётся уравнения отрезков(или примитивов). потом пишете if(проверка соответствия точки всем уравнениям) { точка принадлежит области} else {не, не попали...}
то есть если у меня сектор + какой то треугольник, то мне надо сначала так сказать решить математически, а после каким-то магическим образом написать программу грубо говоря на удовлетворения всем условиям?
tkach_fcz вне форума
Старый 10.09.2013, 23:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
то мне надо сначала так сказать решить математически
точно так. А ещё точнее - записать в виде формулы (уравнения) условия попадания точки с координатами X и Y в заданную область.

Цитата:
а после каким-то магическим образом написать программу
угу. И эта магия называется "программирование". Судя по всему, это у Вас учебное задание. Т.е. Вас к этому моменту уже должны были научить, как написать программу "Hello, world!"
Serge_Bliznykov вне форума
Старый 11.09.2013, 00:15   #5
tkach_fcz
 
Регистрация: 10.09.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
точно так. А ещё точнее - записать в виде формулы (уравнения) условия попадания точки с координатами X и Y в заданную область.

допустим у меня такая область. (Малевич в гробу перевернулся)
то есть x^2+y^2=<R^2 но это для окружности... попадание в сектор. я должна еще задать условия x=<o и y>=0
или я ошибаюсь?
и + к этому написать условия попадания в треугольник и поставить типа или...или ?
Цитата:
угу. И эта магия называется "программирование". Судя по всему, это у Вас учебное задание. Т.е. Вас к этому моменту уже должны были научить, как написать программу "Hello, world!"
не совсем угадали, мой вуз предпалагает что мы в школе проходили хотя бы паскаль и все это знаем, поэтому нам просто выдали лабы и сказали пишите, потом будем разбирать ошибки. но программу Хеллоу Ворд - я написать смогла, и даже программу по переводу градусов Цельсия в Фаренгейт тоже раза с 4 написала, но похоже на этом мой лимит умения программировать закончился..

Последний раз редактировалось tkach_fcz; 11.09.2013 в 00:46. Причина: орфография
tkach_fcz вне форума
Старый 11.09.2013, 01:31   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Условие примерно такое:
(x^2+y^2<=R^2 и x<=0 и y>=0) или (x>=0 и y<=0 и y>=4x-2R)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.09.2013 в 01:36.
BDA вне форума
Старый 12.09.2013, 15:45   #7
tkach_fcz
 
Регистрация: 10.09.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
y>=4x-2R
не поняла как вы это получили...

Но я сделала вот так вот:
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>

using namespace std;

int main(){
	setlocale(LC_ALL, ".1251");
	double x, y, R;

	cout << "Введите R" << endl;
	cin >> R;
        cout << "Введите x" << endl;
	cin >> x;
        cout << "Введите y" << endl;
	cin  >> y;
	if ((pow(x, 2) + pow(y, 2) <= pow(r, 2) && y > 0 && x < 0) || ( (y >= (-1)*2*r) && x <= r/2 && x >= 0 && y <= 0 ))
	{
		cout << "Лежит" << endl;
	}
	else
	{
		cout << "Не лежит" << endl;
	}
_getch();
	return 0;//выход из функции/программы
}
и в общем я не знаю как сделать
Цитата:
При этом ввод исходных значений и вывод результата должен повторяться до тех пор, пока не будет введена комбинация клавиш <ctrl><z>, что является признаком конца ввода.

Последний раз редактировалось tkach_fcz; 12.09.2013 в 16:04.
tkach_fcz вне форума
Старый 12.09.2013, 17:30   #8
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

зачем условия x=<o и y>=0 если по начальному заданию попадание в окружность?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума
Старый 12.09.2013, 21:48   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

tkach_fcz, это уравнение прямой через 2 точки.

x <= r/2 - это полуплоскость, от вертикальной линии r/2 в отрицательную сторону.
y >= -2*r - полуплоскость, от горизонтальной линии -2*r в положительную сторону.
Ваше условие не совпадает с Вашей картинкой.
Использование pow для возведения в квадрат не оправдано (более затратно, чем x*x).
challengerr, по условию нужна только четверть окружности.

UPD
Код:
#include <iostream>

using namespace std;

int
main(){
    setlocale(LC_ALL, ".1251");
    double x, y, R;
    cout << "Введите R, x, y" << endl;
    while (cin >> R >> x >> y) {
        if ((x * x + y * y <= R * R && y >= 0 && x <= 0) || (y >= 4 * x - 2 * R  && x >= 0 && y <= 0))
            cout << "Лежит" << endl;
        else
            cout << "Не лежит" << endl;
        cout << "Введите R, x, y" << endl;
    }
    return 0;
}
"Мажорный" вариант:
Код:
#include <iostream>

using namespace std;

int
main(){
    setlocale(LC_ALL, ".1251");
    double x, y, R;
    while (cout << "Введите R, x, y" << endl, cin >> R >> x >> y)
        cout << (((x * x + y * y <= R * R && y >= 0 && x <= 0) || (y >= 4 * x - 2 * R  && x >= 0 && y <= 0)) ? "Лежит" : "Не лежит") << endl;
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 12.09.2013 в 23:29.
BDA вне форума
Старый 13.09.2013, 10:45   #10
tkach_fcz
 
Регистрация: 10.09.2013
Сообщений: 7
По умолчанию

BDA, спасибо за разъяснения. Я поняла.

"Мажорный вариант" понравился больше.
Но мне препод забраковал ввод всех трех переменных сразу.

Я сделала вот так (+нашла в интернете объяснение как выходить с помощью ctrl+z)
все корректно?

я нашла один баг. Что программа пробел видит как Enter... И поэьтому если два числа ввести через пробел можно увидеть баг.


Код:
/* main.cpp: определяет точку входа для консольного приложения. "Лабороторная работа №1 за осенний семестр для групп 1-ого курса".
 Тема работы - "Определение попадания точки с введёнными координатами в заданную область".
 Лабораторную работу подготовила, студентка первого курса ФКТиУ НИИ ИТМО. */

#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <cmath>
#include <Windows.h>

using namespace std;


void maybe_stop(){ /* функция, проверяющая поток ввода, и при необходимости - завершающая программу*/
	if ((GetAsyncKeyState(VK_CONTROL) && GetAsyncKeyState(0x5A))){ /* если нажаты клавиши ctrl и z*/
		system("cls");
		cout << "Программа будет завершена, всем спасибо, все свободны! Нажмините Enter." << endl;
		_getch();

		exit(0);
	}
}

int main(){
	setlocale(LC_ALL, ".1251"); /*поддержка русского языка*/
	double R, x, y; 

	while(true){
		
		cout << "\nВведите радиус: ";
		cin >> R;
		while(!cin.good()){
			maybe_stop();
			cin.clear();
			cin.get();
			cout << "\nВы ввели недопустимый символ. Введите верный радиус: ";
			cin >> R;
			system("cls");
		}
		
		cout << "\nВведите x: ";
		cin >> x;
		while(!cin.good()){
			maybe_stop();
			cin.clear();
			cin.get();
			cout << "\nВы ввели недопустимый символ. Введите верный x: ";
			cin >> x;
			system("cls");
		}
		
		cout << "\nВведите y: ";
		cin >> y;
		while(!cin.good()){
			maybe_stop();
			cin.clear();
			cin.get();
			cout << "\nВы ввели недопустимый символ. Введите верный y: ";
			cin >> y;
			system("cls");
		}
		
		system("cls");
		cout << "Точка с координатами " << x << " и " << y << " при радиуе " << R;
		if ((x * x + y * y <= R * R && y >= 0 && x <= 0) || ( y>= 4*x-2*R && x >= 0 && y <= 0 )) 
		{ /*условие задания*/
			cout << " входит в данную область\n" << endl; /*принадлежит*/
		}
		else
		{
			cout << " не входит в данную область\n" << endl; /*не принадлежит */
		}
	}

	/*return 0; - выход из функции/программы - строка не имеет смысла и может быть удалена, С++ всегда возвращает 0 по умолчанию*/
}
tkach_fcz вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Попадание точки в зашифрованную область. PROkaZZZniK Помощь студентам 4 22.10.2011 15:15
попадание точки в область arshavin Паскаль, Turbo Pascal, PascalABC.NET 4 04.05.2011 15:28
попадание точки в закрашенную область pomchik Помощь студентам 13 01.10.2010 11:29
Попадание точки в область (С++) Evgenii90 Помощь студентам 10 16.04.2010 22:41
Попадание точки в область С++ Geg[C/c++] Помощь студентам 3 03.05.2009 12:58