download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Една задачка на C++ да ми кажете къде бъркам в кода :)

<1 2 3 4 5 6 7 8 9 >

Автор
Съобщение
кака.лара
Нед, 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 ; та като гръмне нещо поне да върне кода на грешката.

редактиран от кака.лара на 27.06.10 22:04
редактиран от кака.лара на 28.06.10 20:53
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(...). Проверих и по двата начина. Получава се, че при единият начин се компилира първо проверката, а при втория се компилира първо цикъла. Т.е. единственото, което може да се спечели при промяна на местата на условието е скорост на програмата.
редактиран от phrozencrew на 03.07.10 18:32
редактиран от phrozencrew на 03.07.10 21:00

<1 2 3 4 5 6 7 8 9 >

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.