Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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)
> Я спрашивал зачем (для чего) надо. Разницу чувствуем???

Я вот тоже нее пойму что ты хочешь узнать от автора. В смысле &#151; вернуть надо было 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
15-1392038991
Мистер Хэ
2014-02-10 17:29
2014.09.21
_DynArrayAddRef/_NewUnicodeString/_NewAnsiString/_NewWideString


15-1390288445
JohnKorsh
2014-01-21 11:14
2014.09.21
Не по Delphi (поиск алгорима)


2-1382028464
Евгений07
2013-10-17 20:47
2014.09.21
Ошибка компиляции функций виндовс


15-1392553681
Разведка
2014-02-16 16:28
2014.09.21
как свернуть все процедуры и функции


15-1392050673
petr
2014-02-10 20:44
2014.09.21
Что-нить похожее на DevExpress, но на java





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский