Форум: "Прочее";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];
Вниззадача на С++ Найти похожие ветки
← →
alex_ (2014-02-13 17:57) [0]Попросили родственники решить одной девочке задачу. Задача о попадании точки заданной X, Y в определенную область.
Вот рисунок: http://s018.radikal.ru/i527/1402/ee/f37e03c13b9a.png
вот мое решение (которое забраковали - сказали что программа не верная, причем на глаз без проверок):
#include <iostream.h>
#include <math.h>
int main() {
float x,y;
bool flag;
cout << "vvedite X, Y" << endl;
cin >> x >> y;
flag = false;
// попадание в круг с единичным радиусом в центре 0,0
// r = 1;
if(sqrt(pow(x,2)+pow(y,2)) <= 1) {
cout << "popali v krug" << endl;
flag = true;
}
//координаты треугольника A(0,0) B(-2,0) C(0,-2)
if(x <= 0 && y <= 0 && x >= -2 && y >= -2 && ((abs(x) + abs(y)) <= 2) ) {
cout << "popali v treugolnick" << endl;
flag = true;
}
if(!flag) cout << "ne popali ni kuda" << endl;
system("PAUSE");
return 0;
}
А вот правильное решение, которое дали девушке:
#include <iostream.h>
int main() {
float x,y;
cout << "Введите значение Х и У: " << endl;
cin >> x >> y;
if(x*x+y*y <= 1 || x <= 0 && y <= 0 && y >= -x-2)
cout << "Попали" << endl;
else cout << "Не попали" << endl;
return 0;
}
Но уже поздно.))) Выдали новое задание с другими областями)))
← →
Rouse_ © (2014-02-13 18:08) [1]Вопрос то какой?
← →
alex_ (2014-02-13 19:03) [2]
> Rouse_ © (13.02.14 18:08) [1]
>
> Вопрос то какой?
Почему забраковали.
← →
MBo © (2014-02-13 19:13) [3]на быстрый взгляд - не неправильно, только неоптимально и лишние проверки
← →
clickmaker © (2014-02-13 19:13) [4]> Почему забраковали.
не нравишься родственникам девушки, значит
← →
Rouse_ © (2014-02-13 19:22) [5]Видимо потому что sqrt, abs и pow они еще не проходили...
← →
Dennis I. Komarov © (2014-02-13 20:23) [6]
> Почему забраковали.
А зачем огород городить?function Test(x, y: Extended): Boolean;
begin
Result := (x<=0) and (y<=0) and (y>=-x-2) or (x*x+y*y<=1);
end;
З.Ы.
На Си уж сами...
З.З.Ы.
> int main() {
...
> return 0;
А вот это зачем?
← →
Rouse_ © (2014-02-13 20:56) [7]
> Dennis I. Komarov © (13.02.14 20:23) [6]
> З.З.Ы.
>
> > int main() {
> ...
> > return 0;
>
>
> А вот это зачем?
Было бы void main() - было бы не нужно.
А так будьте добры возвернуть результат :)
← →
alex_ (2014-02-13 21:59) [8]
> Result := (x<=0) and (y<=0) and (y>=-x-2) or (x*x+y*y<=1);
Ну а я в математике не силен, сделал так, какой первый вариант пришел в голову. Факт тот, что решение вже же правильное.
> Видимо потому что sqrt, abs и pow они еще не проходили..
> .
Да неверное все же призошел прокол, да плюс пара вопросов...
А на меня все сперли)))
← →
Dennis I. Komarov © (2014-02-13 23:22) [9]
> Было бы void main() - было бы не нужно.
> А так будьте добры возвернуть результат :)
Так я спрашивал "зачем", а не "почему", есть разница? :)
Это, кстати, автору вопрос ;)
> Да неверное все же призошел прокол, да плюс пара вопросов.
> ..
>
> А на меня все сперли)))
Неверное, это когда существует такая точка (x, y) при которой данный алгоритм (программа, функция) дает ложный результат.
← →
alex_ (2014-02-13 23:44) [10]
> Так я спрашивал "зачем", а не "почему", есть разница? :)
> Это, кстати, автору вопрос ;)
ну раз int main(), то значит надо. К тому же зачем warning о том что функция должна что-то возвратить?
← →
Dennis I. Komarov © (2014-02-13 23:52) [11]
> ну раз int main(), то значит надо.
Я не спорю, что надо. Я спрашивал зачем (для чего) надо. Разницу чувствуем???
> К тому же зачем warning о том что функция должна что-то
> возвратить?
Это никак не относится к вопросу.
← →
alex_ (2014-02-14 00:05) [12]Ну раз интересно, то погугли.
Я не знаю ответа на этот вопрос, так как Си незнаю, а чтобы писать такие примитивные примеры, много знаний Си не требуется.
← →
Inovet © (2014-02-14 09:07) [13]> [11] Dennis I. Komarov © (13.02.14 23:52)
> Я спрашивал зачем (для чего) надо. Разницу чувствуем???
Я вот тоже нее пойму что ты хочешь узнать от автора. В смысле — вернуть надо было 0 при успехе либо 1,2,3 при неверных данных?
← →
Dennis I. Komarov © (2014-02-14 09:46) [14]
> Я вот тоже нее пойму что ты хочешь узнать от автора. В смысле
> — вернуть надо было 0 при успехе либо 1,2,3 при неверных
> данных?
Да просто не понял накой ляд этот интеджер нужен. Бессмысленный результат функции. Проехали...
← →
Inovet © (2014-02-14 10:05) [15]> [14] Dennis I. Komarov © (14.02.14 09:46)
ОСи нужен.
← →
Dennis I. Komarov © (2014-02-14 10:16) [16]
> ОСи нужен.
Это консолька и а ля halt(0)?
← →
Rouse_ © (2014-02-14 10:20) [17]Это аналог ExitCode, который есть у любого приложения.
← →
Dennis I. Komarov © (2014-02-14 10:44) [18]
> Это аналог ExitCode, который есть у любого приложения.
Ну так и я про него, даже "0" выделил... :)
← →
palva © (2014-02-14 11:39) [19]> Dennis I. Komarov © (13.02.14 23:52) [11]
> Я не спорю, что надо. Я спрашивал зачем (для чего) надо. Разницу чувствуем???
Это требования стандарта, которые обычно можно не соблюдать.
Но преподаватели нервничают, когда их ученики пишут не так, как их только что научили.
Сам стандарт я, конечно, не читал. Обычно важнее требования конкретного компилятора. Но во многих местах об этом пишут.
http://www.delorie.com/djgpp/v2faq/faq22_25.html
← →
alex_ (2014-02-14 11:52) [20]Внимание. Новая задача
вот область: http://s020.radikal.ru/i714/1402/98/a8451cd7af43.png
вот мое решение:
#include <iostream.h>
#include <math.h>
int main() {
float x,y;
cout << "vvedite X,Y" << endl;
cin >> x >> y;
//левое полушарие //правое полушарие
if (((sqrt(pow(x+1,2) + pow(y,2)) <= 2) && (y <= 0)) || ((sqrt(pow(x-1,2) + pow(y,2)) <= 2) && (y <= 0)))
cout << "popali" << endl;
else cout << "ne popali" << endl;
system("PAUSE");
return 0;
}
в решении отталкиваюсь от формулы нахождение расстояния между двумя точками на плоскости по формуле: SQRT((X2-X1)^2 + (Y2-Y1)^2).
Опять перемудрил?
← →
Dennis I. Komarov © (2014-02-14 12:14) [21]
function Test(x, y: Extended): Boolean;
begin
Result := (y<=0) and (((x+1)*(x+1)+y*y<=1) or ((x-1)*(x-1)+y*y<=1));
end;
Транслируй сам
← →
Dennis I. Komarov © (2014-02-14 12:16) [22]P.S. Это от руки, сзади еще скобку надо...
← →
Dennis I. Komarov © (2014-02-14 12:19) [23]Да и картинка какая-то кривенькая, я бы уточнил на счет строгости неравенств. А то опять крайний будешь...
← →
MBo © (2014-02-14 12:25) [24]>вот область:
Ну у вас и картиночки, доктор ;)
как вариант [21]:
(y<=0) and ( x*x+y*y<=2*Abs(x))
← →
alex_ (2014-02-14 12:41) [25]
> Да и картинка какая-то кривенькая, я бы уточнил на счет
> строгости неравенств. А то опять крайний будешь...
Это я сам рисовал.
> Ну у вас и картиночки, доктор ;)
Вы че усмотрели в картинке женскую грудь? )
← →
Sha © (2014-02-14 12:46) [26]
t:=abs(x)-1;
(y<=0) and (t*t+y*y<=1)
← →
alex_ (2014-02-14 12:48) [27]
> Sha © (14.02.14 12:46) [26]
>
> t:=abs(x)-1;
> (y<=0) and (t*t+y*y<=1)
if (((sqrt(pow(x+1,2) + pow(y,2)) <= 2) && (y <= 0)) || ((sqrt(pow(x-1,2) + pow(y,2)) <= 2) && (y <= 0)))
Мое намного солидней выглядет
← →
Dennis I. Komarov © (2014-02-14 12:50) [28]
> ( x*x+y*y<=2*Abs(x))
Я сначала тоже подумал abs по X... Спалят... ;)
← →
Inovet © (2014-02-14 13:06) [29]> [19] palva © (14.02.14 11:39)
> Это требования стандарта, которые обычно можно не соблюдать.
Что знначит не соблюдать. Это значение можно использовать при обработе результата в cmd файле, например. Лучше соблюдать.
← →
palva © (2014-02-14 13:20) [30]> Что знначит не соблюдать.
Я имел в виду, что на большинстве компиляторов нарушение этого стандарта не вызовет последствий. Иногда не будет даже предупреждения.
> Лучше соблюдать.
Это естественно. А еще лучше соблюдать стандарты преподавателя или той книжки, по которой преподаватель занимается. Программа же пишется от имени ученика. И она должна выглядеть как написанная учеником. А не
> Мое намного солидней выглядет
Показать свою солидность можно перед учеником, а для самого ученика это обычно выходит боком.
← →
Inovet © (2014-02-14 14:16) [31]> [24] MBo © (14.02.14 12:25)
> Ну у вас и картиночки, доктор ;)
Это же плагиат недоделанный
http://live.mephist.ru/?mid=1238602628
← →
Inovet © (2014-02-14 14:18) [32]> [30] palva © (14.02.14 13:20)
> Я имел в виду, что на большинстве компиляторов нарушение
> этого стандарта не вызовет последствий.
viod тогда надо, а компилятор подсунет соответсвующую обёртку и сам вернёт 0.
← →
Inovet © (2014-02-14 14:20) [33]> [27] alex_ (14.02.14 12:48)
В Сях не надо столько скобок, там приоритеты операций другие.
← →
alex_ (2014-02-14 14:34) [34]
> В Сях не надо столько скобок, там приоритеты операций другие.
Для наглядности
← →
alex_ (2014-02-17 18:33) [35]Еще родственники припрягли решить задачку. Нужно реализовать поиск подстроки в строке
Вот моя реализация:
#include <iostream.h>
int find_substr(char *sub, char *str);
int main() {
int index;
index = find_substr("hello", "my friend hello and bay");
cout << "Index: " << index << endl;
system("PAUSE");
return 0;
}
int find_substr(char *sub, char *str) {
char *ps, *pf;
for(int i = 0; str[i] ; i++) {
ps = &str[i];
pf = sub;
while(*pf && *pf == *ps) {
ps++;
pf++;
}
if(!*pf) return i;
}
return -1;
}
Ваши комментарии, за такое не убьют?
Я в Си почти 0, нахватался основ (прочел брошурку для чайников по структурному программирования)
← →
Rouse_ © (2014-02-17 18:39) [36]
> Ваши комментарии, за такое не убьют?
Конечно убьют, условие цикла навивает...
← →
alex_ (2014-02-17 19:00) [37]
> Конечно убьют, условие цикла навивает...
ну как же? это же по типу хороший тон.
← →
Rouse_ © (2014-02-17 19:16) [38]Конец цикла у тебя чем ограничен?
← →
Rouse_ © (2014-02-17 19:28) [39]Хотя нет, эт я уже забыл нюансы типа:
for (int i=0; str[i] != "\0";i++)
В условии все верно.
← →
alex_ (2014-02-17 19:29) [40]
> Конец цикла у тебя чем ограничен?
Строка в си ограничивается последним символом \0
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.004 c