Автор Тема: C++ помощ за начинаеши  (Прочетена 3660 пъти)

Yasen6275

  • Напреднали
  • *****
  • Публикации: 553
    • Профил
C++ помощ за начинаеши
« -: 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.
« Последна редакция: Nov 16, 2010, 21:16 от Yasen6275 »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: C++ помощ за начинаеши
« Отговор #1 -: Nov 16, 2010, 21:32 »
Код:
              while ((counter<=10) || (err>=prec))
Активен

0x2B|~0x2B

Yasen6275

  • Напреднали
  • *****
  • Публикации: 553
    • Профил
Re: C++ помощ за начинаеши
« Отговор #2 -: Nov 16, 2010, 21:48 »
Все по често се убеждавам че е тежко да си тъп. При две условия и or или || връзка между тях се излиза от цикъла когато и двете са false.

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

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: C++ помощ за начинаеши
« Отговор #3 -: Nov 16, 2010, 21:52 »
Все по често се убеждавам че е тежко да си тъп. При две условия и or или || връзка между тях се излиза от цикъла когато и двете са false.

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

0x2B|~0x2B

Yasen6275

  • Напреднали
  • *****
  • Публикации: 553
    • Профил
Re: C++ помощ за начинаеши
« Отговор #4 -: Nov 16, 2010, 21:56 »
Анджък. Нещо такова трябва да е. Мерси Ромео.

// Точния запис не е ли:
Код
GeSHi (C++):
  1. while (!((counter<=10) ^ (err>=prec)) && ! ((counter<=10) && (err>=prec)))
« Последна редакция: Nov 16, 2010, 22:12 от Yasen6275 »
Активен

bvbfan

  • Напреднали
  • *****
  • Публикации: 1056
  • Distribution: KaOS
  • Window Manager: Plasma 5
    • Профил
Re: C++ помощ за начинаеши
« Отговор #5 -: Nov 16, 2010, 22:02 »
Все по често се убеждавам че е тежко да си тъп.
Така е, знам от опит  ;D
Активен

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: C++ помощ за начинаеши
« Отговор #6 -: Nov 16, 2010, 22:17 »
Защо ти трябва да излизаш от цикъла само когато едното условие е false? Ако и двете условия са false едва ли ще искаш да циклиш.
Активен

Yasen6275

  • Напреднали
  • *****
  • Публикации: 553
    • Профил
Re: C++ помощ за начинаеши
« Отговор #7 -: 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 вечерта май.

« Последна редакция: Nov 16, 2010, 23:15 от Yasen6275 »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: C++ помощ за начинаеши
« Отговор #8 -: 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
Активен

0x2B|~0x2B

Yasen6275

  • Напреднали
  • *****
  • Публикации: 553
    • Профил
Re: C++ помощ за начинаеши
« Отговор #9 -: Nov 16, 2010, 23:16 »
мда по лено е. Ма трябва да се сети човек  :) [_]3 Айде лека нощ.
Активен

Георги

  • Напреднали
  • *****
  • Публикации: 45
  • Distribution: Ubuntu
  • Window Manager: GNOME
    • Профил
Re: C++ помощ за начинаеши
« Отговор #10 -: 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;
}
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: C++ помощ за начинаеши
« Отговор #11 -: Feb 21, 2011, 12:17 »
Кажи каква е грешката при компилация, за да може да си обясниш смисъла ѝ :)
Активен

Георги

  • Напреднали
  • *****
  • Публикации: 45
  • Distribution: Ubuntu
  • Window Manager: GNOME
    • Профил
Re: C++ помощ за начинаеши
« Отговор #12 -: Feb 21, 2011, 12:33 »
При компилация, не показа никъква грешка  ??? , а когато е само кода Kdevelop показва следните грешки :
Expected token ';' after 'identifier' found 'number_literal'
Unexpected token 'identifier'
unexpected new line

Нещо, не разбирам .....
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: C++ помощ за начинаеши
« Отговор #13 -: 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
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: C++ помощ за начинаеши
« Отговор #14 -: 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
Това не е синтактична грешка, обаче :)
Активен