Przejdź do głównej zawartości

Posty

Wyświetlanie postów z czerwiec, 2013

Pierwiastek kwadratowy [m. połowienia]

Metoda połowienia jest najwolniej zbieżną metodą znajdowania przybliżonych pierwiastków funkcji w zadanym przedziale argumentów [a; b]. Metodę tę można zastosować, jeśli funkcja jest ciągła i ma przeciwne wartości w krańcach przedziału ( f(a) * f(b) < 0 ). Aby wykorzystać tę metodę do wyznaczania wartości pierwiastków kwadratowych należy odpowiednio przygotować funkcję kwadratową: f(x) = ax^2 + bx + c

Pierwiastek kwadratowy [m. Newtona-Raphsona]

Do wyznaczania pierwiastka kwadratowego liczby dodatniej można wykorzystać m.in. metodę Newtona-Raphsona. Zakłada ona, że postawiony problem jest identyczny z problemem, w którym należy szukać długości boku kwadratu o znanym polu powierzchni.

Podział stringa [getline]

Funkcja getline może przyjmować trzy parametry: źródło, element docelowy i znak, do który ma przerwać odczytywanie danych. Gdy program będzie wyglądał tak: #include <iostream>   using namespace std ;   int main ( ) { string s ; while ( getline ( cin , s, '-' ) ) {     cout << s << endl ; }   return 0 ; } a na wejściu otrzymamy: 12-05-2011 to wynikiem działania naszego programu będzie: 12 05 2011 Wykorzystam teraz tę właściwość funkcji getline by podzielić otrzymany ciąg znaków. Miejscem cięcia będzie określony znak. Efektem podziału będzie odpowiedni vector: #include <iostream> #include <vector> #include <sstream>   using namespace std ;   int main ( ) {     string s = "12-05-2013" ;     vector < string > el ;     stringstream ss ( s ) ;     string item ;     while ( getline ( ss, item, '-' ) ) {         el. push_back ( item ) ;     }     for ( int i = 0 ; i <

Anagramy

Anagram jest to, najczęściej, wyraz powstały w wyniku przestawień liter w innym wyrazie. Zauważyć należy, że każde słowo to tak naprawdę zbór znaków. Jeżeli mamy słowo i jego anagram to składają się one z tych samych liter. Sortując litery (w kolejności rosnącej lub malejącej) w tych wyrazach utworzymy identyczne ciągi. Tak przetworzone ciągi należy porównać by dowiedzieć się czy jedno słowo jest anagramem drugiego (i odwrotnie). Wykorzystując funkcję sort #include <iostream> #include <algorithm> using namespace std ;   int main ( ) {     string sSlowo1, sSlowo2 ;     while ( cin >> sSlowo1 >> sSlowo2 ) {         sort ( sSlowo1. begin ( ) ,sSlowo1. end ( ) ) ;         sort ( sSlowo2. begin ( ) ,sSlowo2. end ( ) ) ;         if ( sSlowo1 == sSlowo2 )             cout << "Tak" << endl ;         else             cout << "Nie" << endl ;     }     return 0 ; } Wykorzystując sortowanie

Największy i najmniejszy element w tablicy

Przeszukiwanie tablicy w poszukiwaniu elementów największych i najmniejszych polega na porównaniu wszystkich elementów ze sobą. #include <iostream>           using namespace std ;   int main ( ) {   int iTab [ ] = { 3 , 7 , 2 , 5 , 6 , 4 , 9 } ;   int n ;   n = sizeof ( iTab ) / sizeof ( int ) ;     int min = iTab [ 0 ] ;   int max = min ;     for ( int i = 1 ; i < n ; i ++ )   {       if ( min > iTab [ i ] )         min = iTab [ i ] ;       if ( max < iTab [ i ] )         max = iTab [ i ] ;   }   cout << "min: " << min << endl ;   cout << "max: " << max << endl ;   return 0 ; } W celu skrócenia kodu można użyć funkcji : min_element i max_element. #include <iostream>     #include <algorithm>       using namespace std ;   int main ( ) {   int iTab [ ] = { 3 , 7 , 2 , 5 , 6 , 4 , 9 } ;     cout << "min: " << *

Konwersja z systemu 10 na 16 [dec2hex]

1. Typowe podejście do konwersji między systemem decymalnym a innymi systemami liczbowymi. Zapamiętujemy resztę z dzielenia liczby dziesiętnej przez liczbę podstawę docelowego systemu (w tym przypadku 16) ( iDec % 16)  , następnie dzielimy liczbę całkowicie przez podstawę docelowego systemu liczbowego ( iDec / = 16) . Powtarzamy tę czynność dopóki liczba dziesiętna nie stanie się zerem ( while ( iDec ) ). #include <iostream>   using namespace std ;   int main ( ) {     int iDec ;     string sHex ;     string sTmp = "0123456789ABCDEF" ;     cin >> iDec ;     while ( iDec ) {         sHex = sTmp [ iDec % 16 ] + sHex ;         iDec / = 16 ;     }     cout << sHex ;     return 0 ; } Kolejne otrzymywane reszty powinny wchodzić na początek generowanej liczby stąd zapis: sHex = sTmp [ iDec % 16 ] + sHex ; Dzięki zmiennej pomocniczej sTmp dostajemy odpowiednią "cyfrę" bez dodatkowej analizy otrzymanej reszty. 2.