Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: Yasen6275 в Nov 16, 2010, 21:08



Титла: C++ помощ за начинаеши
Публикувано от: Yasen6275 в Nov 16, 2010, 21:08
Подозирам че ше бъда освиркан но въпреки това
Код
GeSHi (C++):
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    double number,igues,err,tmp,prec,;
  10.    long int counter,i;
  11.    counter=0;
  12.    err=1;
  13.    prec=1/1000;
  14.    cout<<"Number:";
  15.    cin>>number;
  16.    cout<<"Initial gues:";
  17.    cin>>igues;
  18.              while ((counter<=10)or(err>=prec))
  19.                    {
  20.                    tmp = igues/2 + number/igues/2;
  21.                    err = fabs((tmp*tmp - number));
  22.                    igues = tmp;
  23.                    counter++;
  24.                    cout<<counter<<" iteration:"<<igues<<" err: "<<err<<"\n";
  25.                    };                                  
  26.    system("PAUSE");
  27.    return EXIT_SUCCESS;
  28. }  
В този вариант while циккъла се получава безкраен. замяната на
Код
GeSHi (C++):
  1. prec=1/1000;
с
Код
GeSHi (C++):
  1. prec=1.0/1000;
води до сработване на проверката с брояча, но не и тази за прецизност на резултата.
Цитат
Number:100
Initial gues:2
1 iteration:26 err: 576
2 iteration:14.9231 err: 122.698
3 iteration:10.8121 err: 16.9005
4 iteration:10.0305 err: 0.610834
5 iteration:10 err: 0.000927132
6 iteration:10 err: 2.14893e-009
7 iteration:10 err: 0
8 iteration:10 err: 0
9 iteration:10 err: 0
10 iteration:10 err: 0
11 iteration:10 err: 0
Press any key to continue . . .
това е изхода от програмат за за 100 и начално приближение 2. Използвам dev c++ което май ползва  windows порт на gcc 3.4.2.


Титла: Re: C++ помощ за начинаеши
Публикувано от: romeo_ninov в Nov 16, 2010, 21:32
Код:
              while ((counter<=10) || (err>=prec))


Титла: Re: C++ помощ за начинаеши
Публикувано от: Yasen6275 в Nov 16, 2010, 21:48
Все по често се убеждавам че е тежко да си тъп. При две условия и or или || връзка между тях се излиза от цикъла когато и двете са false.

Има ли оператор който ще ми даде  false когато само едното условие е false?


Титла: Re: C++ помощ за начинаеши
Публикувано от: romeo_ninov в Nov 16, 2010, 21:52
Все по често се убеждавам че е тежко да си тъп. При две условия и or или || връзка между тях се излиза от цикъла когато и двете са false.

Има ли оператор който ще ми даде  false когато само едното условие е false?
XOR (става като ИЛИ както е по-горе и И на  НЕ И на двете условия) нещо такова :)
П.П. май така ще изглежда
Код:
         while (((counter<=10) || (err>=prec)) && ! ((counter<=10) && (err>=prec)))


Титла: Re: C++ помощ за начинаеши
Публикувано от: Yasen6275 в Nov 16, 2010, 21:56
Анджък. Нещо такова трябва да е. Мерси Ромео.

// Точния запис не е ли:
Код
GeSHi (C++):
  1. while (!((counter<=10) ^ (err>=prec)) && ! ((counter<=10) && (err>=prec)))


Титла: Re: C++ помощ за начинаеши
Публикувано от: bvbfan в Nov 16, 2010, 22:02
Все по често се убеждавам че е тежко да си тъп.
Така е, знам от опит  ;D


Титла: Re: C++ помощ за начинаеши
Публикувано от: dvasilev в Nov 16, 2010, 22:17
Защо ти трябва да излизаш от цикъла само когато едното условие е false? Ако и двете условия са false едва ли ще искаш да циклиш.


Титла: Re: C++ помощ за начинаеши
Публикувано от: Yasen6275 в Nov 16, 2010, 22:52
Цикъл while  се върти докато условието е вярно. При наличие на 2 условия аз искам да излезе когато поне едно от тях е false. За това !xor ми върши работа освен в случая когато и двете са истина. Затова
Код
GeSHi (C++):
  1. while (!((counter<=10) ^ (err>=prec)) && ((counter<=10) && (err>=prec)))
би трбвало да ме устройва.


Всъшност не ме устройва. !xor ми дава истина при изпълнено само едното условие. Мен ми трябва истина и когато са изпълнени и двете условия. Тогава !xor е лъжа "и" "и" истина е пак лъжа. .
 вариантите са
0 0
0 1
1 0
1 1
резултата от or трябва да са
0
1
1
1
а на мен ми трябва обратното. Тоест решението е много по просто !or или
Код
GeSHi (C++):
  1. while (!(counter<=10) || (err>=prec))
Не трябва да се програмира след 6 вечерта май.



Титла: Re: C++ помощ за начинаеши
Публикувано от: romeo_ninov в Nov 16, 2010, 22:57
Цикъл while  се върти докато условието е вярно. При наличие на 2 условия аз искам да излезе когато поне едно от тях е false. За това !xor ми върши работа освен в случая когато и двете са истина. Затова
Код
GeSHi (C++):
  1. while (!((counter<=10) ^ (err>=prec)) && ((counter<=10) && (err>=prec)))
би трбвало да ме устройва
тогава не е ли по-лесно
Код:
while (!((counter<=10) && (err>=prec)))
Това е true ако някое от двете е false


Титла: Re: C++ помощ за начинаеши
Публикувано от: Yasen6275 в Nov 16, 2010, 23:16
мда по лено е. Ма трябва да се сети човек  :) [_]3 Айде лека нощ.


Титла: Re: C++ помощ за начинаеши
Публикувано от: Георги в Feb 21, 2011, 12:11
Здравейте, видях темата и реших и аз да попитам нещо вчера започнах, така да се каже от А и Б в програмирането и стигнах до малко практически задачи, задачата е следната :
Задача 2. Намерете синтактичните грешки в следващата програма:
include <iostream>
int Main()
{ cout >> “a, b =  “;
  cin << a, b;
  cout << “The product of “ << a << “and” << b << “is: “
         << a*b < “\n”
  return 0;
}

Знам, че съм написал пълни глупости , но може ли някой да и обесни къде греша. Знам, че е нещо супер елементрано и просто, но не ми се отдава вече както преди, след един инцидент .... та кодът който написах аз е :
Код:
int main()
{  cout << "a= " << "/n";
cout << "b= " <<"/n";
cin >> a >> b;
cout << "The product of" << a << "and" << b << "is" << a*b << "/n";
return 0;
}


Титла: Re: C++ помощ за начинаеши
Публикувано от: bop_bop_mara в Feb 21, 2011, 12:17
Кажи каква е грешката при компилация, за да може да си обясниш смисъла ѝ :)


Титла: Re: C++ помощ за начинаеши
Публикувано от: Георги в Feb 21, 2011, 12:33
При компилация, не показа никъква грешка  ??? , а когато е само кода Kdevelop показва следните грешки :
Expected token ';' after 'identifier' found 'number_literal'
Unexpected token 'identifier'
unexpected new line

Нещо, не разбирам .....


Титла: Re: C++ помощ за начинаеши
Публикувано от: b2l в Feb 21, 2011, 12:39

cout << "The product of" << a << "and" << b << "is" << a*b << "/n";

Код:
cout << "The product of" << a << "and" << b << "is" << a*b << "\n";

\n - а не /n


Титла: Re: C++ помощ за начинаеши
Публикувано от: bop_bop_mara в Feb 21, 2011, 12:43
Ако се компилира успешно, това би означавало, че кода е синтактически правилен, т.е. надали щеше да питаш тук.
Ето какво ми даде на мен (компилирам от терминал с g++):
Код:
tmp.cpp: In function ‘int main()’:
tmp.cpp:2: error: ‘cout’ was not declared in this scope
tmp.cpp:4: error: ‘cin’ was not declared in this scope
tmp.cpp:4: error: ‘a’ was not declared in this scope
tmp.cpp:4: error: ‘b’ was not declared in this scope
Това означава, че cout и cin не може да ги намери (махнал си първия ред от оригиналния код - защо реши, че е излишен) и че двете ти променливи a и b не са декларирани.

\n - а не /n
Това не е синтактична грешка, обаче :)


Титла: Re: C++ помощ за начинаеши
Публикувано от: Георги в Feb 21, 2011, 13:10
Не съм махнал 1вия ред от отигиналния код просто не съм го копорал имам си го и него, но 2те променливи не бяха дефинирани и в оригиналната задача , а сега друго се чудя : Напишете програма, която разменя стойностите на две числови променливи. също така трябвяа да се напише без да се използва if


Титла: Re: C++ помощ за начинаеши
Публикувано от: b2l в Feb 21, 2011, 13:12
Код
GeSHi (C):
  1. a = 2
  2. b = 3
  3. c = a
  4. a = b
  5. b = c


Титла: Re: C++ помощ за начинаеши
Публикувано от: bop_bop_mara в Feb 21, 2011, 13:22
Не съм махнал 1вия ред от отигиналния код просто не съм го копорал имам си го и него, но 2те променливи не бяха дефинирани и в оригиналната задача ,
Ами да, нали това е целта на оригиналната задача - да ѝ се поправят синтактичните грешки, липсата на декларация си е вид синтактична грешка...
Имаш първия ред, а по него нещо поправя ли?
Също така в старанието беше попрекалил с поправките, беше разделил
Код:
cout << “a, b =  “;
на
Код:
cout << "a= " << "/n";
cout << "b= " <<"/n";

Понеже си минал на следващата, в крайна сметка тръгна ли тази задача и разбра ли грешките?


Титла: Re: C++ помощ за начинаеши
Публикувано от: chen_dzen в Feb 21, 2011, 19:41
изпуснал си именованото пространство

using namespace std;

или го направи така :

std::cout<<"dad";
std::cin>>"a";


Титла: Re: C++ помощ за начинаеши
Публикувано от: Георги в Feb 21, 2011, 20:29
Eми така и не разбрах грешките в онази програма, но винаги без значение какво пиша , компилатора ми дава грешка : cout was not declared in this scope , нещо тотално се обърках какво трябва да му се упомене ? и  с този код пак дава грешката :
Код
GeSHi (C++):
  1. // Zad4.cpp
  2. #include <iostream>
  3. int main()
  4. {double a = 2.3;
  5.  double b = 3.7;
  6.  double p, s;
  7.  /* намиране на периметъра
  8.      на правоъгълника */
  9.  p = 2*(a+b);
  10.  /* намиране на лицето на правоъгълника */
  11.  s = a*b;
  12. /* извеждане на периметъра */
  13.  cout << "p= " << p << "\n";
  14.  /* извеждане на лицето */
  15.  cout << "s= " << s << "\n";
  16.  return 0;
  17. }
  18.  

като добавих using namespace std; се оправи, но не разбирам защо така се получава ? Погледнах дали правилно съм написал кода всичко беше ОК дори в книгата беше без namespace std;


Титла: Re: C++ помощ за начинаеши
Публикувано от: b2l в Feb 21, 2011, 20:42
изпуснал си именованото пространство

using namespace std;

или го направи така :

std::cout<<"dad";
std::cin>>"a";

Ето ти го решението.