Една задачка на C++ да ми кажете къде бъркам в кода :)
Автор |
|
кака.лараНед, 27.06.10, 21:49 |
Специално за случая качих DevC++. Виждаш ли колко те обичкам Малко бръкнах сорса да разкарам M$-ките дивотии. Не ще да се компилира. Дава ми грешка 23 E:\My Documents\Untitled1.cpp [Error] converting to `int' from `double'. Това 23 отпред е номера на реда.
За вложените функции. Това не е влагане, а нормално извикване на параметър през функция. Нищо му няма. На теория функцията може да вика себе си колкото и е кеф. На практика някой ден ще препълни паметта Даже това си е напълно редовен номер, рекурсивните функции направо викат себе си не като параметър, а вътре в тялото на функцията. Номерът е, че при компилиране в кода се слага не самата функция, а указател към нея. После при работата, резултатите от отделните извиквания само се трупат в стека и после обратно се смъкват. Въпросът е кога ще прелее стекът рд: Това е кодът на който пробвах: #include <iostream>
using namespace std;
int izvajdane ( int a , int b ) {
int r = a - b ;
return r ; }
int main ( )
{
int x , y , z ;
cout << "x=" ;
cin >> x ;
cout << "y=" ;
cin >> y ;
z = izvajdane ( x , y ) ;
cout << "1= "<< z << endl ;
cout << "2= "<< izvajdane ( x , y ) << endl ;
cout << "3= "<< 4 + izvajdane ( x , y ) << endl ;
cout << "4= "<< izvajdane ( 20 , 10 ) << endl ;
z = 5 + izvajdane ( 10 , 8 ) ;
cout << "5= " << z << endl ;
z = ( 5 + izvajdane ( x , y )) * 2 ;
cout << "6= " << z << endl ;
z = ( double ) izvajdane ( x , y ) / 3 ;
cout << "7= " << ( ( double ) z ) << endl ;
cin >> x;
return 0 ;
} |
Това cin >> x; накрая го сложих от мързел. И онова return 0 ; не ми харесва. Слагай само return ; та като гръмне нещо поне да върне кода на грешката. | | kookkiНед, 27.06.10, 22:19 |
Това за функциите не го знаех ,мерси. Аз ще си експериментирам още че то така се учи ,само книгите не дават резултат. Езика може и да е сложен , Нед ,но пък ми е в учебната програма и нямам избор, а и само за него мога да отида на консултации по време на очните. Пък и на този етап ми е интересен. Како от къде си дръпна Девчето ,че този от този сайт нещо не работи при мен под ограничен акаунт. | | phrozencrewПон, 28.06.10, 07:09 | | | phrozencrewПон, 28.06.10, 20:27 |
Само за семпла съпоставка бих искал да вкарам един код, който е пренаписан от горния до PHP: <?php
if(!defined("STDIN")) {define("STDIN", fopen('php://stdin','r'));}
function izvajdane($a,$b){
$r=$a-$b;
return $r;
}
echo "x= ";
$x = trim(fgets(STDIN));
echo "y= ";
$y = trim(fgets(STDIN));
$z = izvajdane($x ,$y);
echo "1 = $z\n";
echo "2 = ".izvajdane($x ,$y)."\n";
echo "3 = ".(4 + izvajdane ( x , y ))."\n";
$z = 5 + izvajdane($x ,$y);
echo "5 = $z\n";
$z = (5 + izvajdane($x ,$y))*2;
echo "6 = $z\n";
$z = izvajdane($x ,$y)/3;
echo "7 = $z\n";
?> |
Компилирах (ембеднах по-скоро) до exe с bamcompile 1.2. Резултата и сорса: razlika.exe razlika.php Много просто и лесно в сранение с C\C++. Коки, можеш да ползваш PHP за да си компилираш задачите и без това скоростта на писане и дебъгване е в пъти по-добра. Ако преподавателите ти не ти искат сорс-кода, няма да имаш проблеми с ексетата . Тря се малко tips-and-tricks понякога. | | кака.лараПон, 28.06.10, 21:40 | RE: Една задачка на C++ да ми кажете къде бъркам в кода :)
” от къде си дръпна Девчето ,че този от този сайт нещо не работи при мен под ограничен акаунт. „
"Девчето" си го взех от архивния диск. Разправях се с С++ преди 3-4 г. Може и от тука да съм го теглила. Направо не помня. Знам, че имаш проблем от преди с ограничения акаунт. Не знам. Никога не съм си слагала ограничени акаунти и никога не съм имала проблем от това. Пробвай да го сложиш в админския. Риск има ама винаги има и оправия. | | kookkiПон, 28.06.10, 22:39 |
Нед аз отдавна понаглеждам и другите езици ,ама като съм се хванал на хорото ще го играя докрай (аз съм непостоянен човек и програмирането е единственото нещо което не съм за.бал след месеца на увлечение , изключвам цигарите,алкохола и секса ). Изпита беше на тестове с откриване на грешки в кода, определяне какво ще се извърши от кода, колко итерации ще има някакъв цикъл и т.н. има и писане на код по дадено условие. Примерите които показвам си ги съставям сам и никой не ги иска от училището. Въпреки всичко благодаря за PHP-то ,помага ми да се запозная с езика. Между различните езици хващам доста прилики и предполагам ще ми е лесно да премина на друг език след време. Иначе виж на какво ни учат в долните снимки. Досега не съм обръщал внимание ,защото не разбирах ,но вече съм по-навътре с материяла и ми прави впечатление. Поне 2 часа загубих в разгадаване на функцията от снимката и не зацепвам. Става на въпрос за функцията void input (arr a,int n). "arr a" - не ми е ясно какво е. "arr" не е запазена дума за инциализиране на променлива ? Авторите на книгата или се еб..ат с мен ,или не се доизразяват, или аз не зацепвам. Снимал съм и предната страница за да видиш как започва раздела до момента с това "arr" ?????????? снимките са с лошо качество ,но ми е смотан апарата
това е на предната страница От първата снимка ще разберете защо преди се натисках да използвам if (cin.fail()) редактиран от kookki на 28.06.10 22:46 | | кака.лараПон, 28.06.10, 23:02 |
arr е потребителски дефинаран тип. Виж по предните страници.
| | kookkiПон, 28.06.10, 23:20 |
Како ,супер си ! Един колега който си е програмист любител каза ,че учебника е зле структуриран и сега разбирам какво е имал предвид. Ако не бяха разкъсали кода така ,едва ли щях да задам такъв тъп въпрос. Аз досега търся назад по страниците ( не напред ) и в интернет. Май се изложих. Срам. Поне ми стана ясно защо бях толкова наплашен от функциите преди - в този пример хем ни запознават с масив ,хем с функция ,хем е по-сложно ,но автора едва ли мисли като начинаещ. редактиран от kookki на 28.06.10 23:45 | | кака.лараВто, 29.06.10, 20:44 |
Хич да не ти дреме! Нито си се изложил нито нищо. Половината и повече учебници по програмиране са писани така. Не знам. Може авторите да са почнали да мислят дървено като компютри и както мислят така пишат Професионално изкривяване. Номерът е да им свикнеш. | | phrozencrewСъб, 03.07.10, 18:32 | RE: Една задачка на C++ да ми кажете къде бъркам в кода :)
” Сори, за изпреварването, но коментара на boy4o съдържа определени алтернативи, които в случая е редно да се акцентират. Но преди всичко ще отбележа, че от скромните ми познания за CC++ съм разбрал, че сам трябва да се пазя от грешките. В случая дали ще се ползва != или =! не знам дали има особено значение, ако компилатора ги поддържа и двете. Но пък функцията while е мега философска! В смисъл ако имаме следния код: 1. Случайint mes=0;
while (suma<=total){
//някакъв код
mes++
} |
То смисъла на този код би се променил изключително ако използваме пълната форма do...while: 2. Случай int mes=0;
do{
//някакъв код
mes++
} while(suma<=total) |
Без много мислене можем да кажем, че във втория случай ще имаме плащане на още една вноскаКолкото и да е странно такива грешки се случват изключително често! А дали не са нарочни! „
Тук съм написал глупост, която ще изтрия, че да не се излъже някой. (МАЙ НЯМА ДА Я ТРИЯ ) В момента дебъгвам един код, в който функцията е обърната точно с do{...}while(...). Проверих и по двата начина. Получава се, че при единият начин се компилира първо проверката, а при втория се компилира първо цикъла. Т.е. единственото, което може да се спечели при промяна на местата на условието е скорост на програмата. | | Коментар |