Palindromy
Ostatnio zmodyfikowano 2016-01-16 05:00
Tyrenz Temat założony przez niniejszego użytkownika |
Palindromy » 2016-01-15 13:26:20 Witam, mam problem z dwoma zadaniami. Czy ktoś mógłby pomóc i wyjaśnić jak się do tego zabrać? Z góry dziękuję. 1. Napisać program, który w tekście wczytanym z klawiatury wyszukuje grupy znaków stanowiące palindromy (palindrom to napis, który jest identyczny przy czytaniu od początku do końca i od końca do początku, np. kajak) Poniżej próba rozwiązania: #include <iostream> #include <string> #include <windows.h>
using namespace std;
int main() { int palindrom = 0, poczatek; char zdanie[ 100 ]; int ciag = 0; cout << "Podaj ciag znakow: " << endl; cin >> zdanie; for( int i = 1; i <= strlen( zdanie ); i++ ) { for( int a = 1; a < strlen( zdanie ); a++ ) { if( zdanie[ i + a ] == zdanie[ i - a ] ) { cout << a << endl; palindrom++; } } } if( palindrom > 0 ) cout << "W ciagu znakow jest palindrom." << endl; if( palindrom < 1 ) cout << "W ciagu znakow nie ma palindromu." << endl; system( "pause" ); return 0; } 2. Struktura: struct PUNKT { double x, y, z; string nazwa; double odleglosc(const double xx, const double yy, const double zz); }; implementuje punkt w przestrzeni 3D. Składowa odleglosc jest funkcją, która oblicza odległość pomiędzy danym punktem, a punktem o współrzędnych xx, yy, zz. Strukturę wykorzystać w programie, który wygeneruje losowo n jej egzemplarzy (danych typu PUNKT a następnie znajdzie parę punktów położonych najbliżej i parę punktów najbardziej oddalonych od siebie. Liczbę punktów n wprowadzać z klawiatury. Tego zadania niestety w ogóle nie rozumiem. |
|
mateczek |
» 2016-01-15 14:58:13 jeśli szukasz wyrazów typu "kajak" z centalną literką: To pierwsza pętla może jechać po wyrazie od 1 do (size -1) A druga pętla rozszerzać się od centrum na boki!!! i sprawdzać litery do momentu wykrycia różnych; metoda ta nie znajdzie takich napisów jak "aa" czy "kaak" #include <string> #include <iostream>
using namespace std;
int main() { string test = { "coskajake eer ewrq" }; string fragment = ""; for( int i = 1; i < test.size() - 1; i++ ) { for( int a = 1; i - a; a++ ) { if( test[ i - a ] != test[ i + a ] ) { if( a > 1 ) { fragment = test.substr( i - a + 1, 2 * a - 1 ); cout << fragment << endl; fragment.clear(); } break; } } } }
drugie zadanie jest prostsze. odległość między punktami to przekątna w trójkącie prostokątnym i w przestrzeni 3D policzysz ją ze wzoru odleglosc^2=x^2+y^2+z^2 musisz obiekty klasy punkt wsadzić w kontener lub tablice. Następnie dwoma forami i wybrać maksymalną odległość PS. To wyszukiwanie mi się spodobało, więc daje drugi kod :) tym razem metoda polega na kopiowaniu napisu, od 2 liter począwszy, i sprawdzeniu fragmentu!!! tym razem wyszuka równierz takie fragmenty jak "aa" #include <iostream> #include <string> using namespace std; bool isPalindrom( string s ) { bool palindrom = true; for( int i = 0, k = s.size() - 1; i < k; i++, k-- ) { if( s[ i ] != s[ k ] ) palindrom = false; } return palindrom; }
using namespace std;
int main() { string test = { "wekajak iopqq" }; string fragment; for( int i = 0; i < test.size() - 1; i++ ) { for( int k = 2; k <= test.size() - i; k++ ) { fragment = test.substr( i, i + k ); if( isPalindrom( fragment ) ) { cout << fragment << endl; i += fragment.size(); } } } } |
|
Tyrenz Temat założony przez niniejszego użytkownika |
Zadanie 2 » 2016-01-15 23:55:22 Dziękuję za pomoc przy zadaniu pierwszym :) Próbuję zrobić zadanie drugie, po skompilowaniu i uruchomieniu program się wysypuje. Jestem na etapie losowaniu punktów. #include <iostream> #include <cstdlib> #include <ctime> #include <windows.h> #include <math.h>
using namespace std;
struct PUNKT { double x, y, z; string nazwa; double odleglosc( const double xx, const double yy, const double zz ); };
int main() { srand( time( NULL ) ); int n; PUNKT tab[ n ]; cout << "Podaj ile chcesz wylosowac punktow: " << endl; cin >> n; for( int i = 0; i < n; i++ ) { tab[ i ].x = rand() % 100 - 50; tab[ i ].y = rand() % 100 - 50; tab[ i ].z = rand() % 100 - 50; } system( "pause" ); return 0; } |
|
mateczek |
» 2016-01-16 05:00:41 Tablicy tak nie można deklarować !!!! musisz najpierw znać rozmiar !!! A jeśli tablica ma nieznany rozmiar albo bierzesz z zapasem albo dynamicznie!!! albo kontener masz poprawiony kody i funkcję odległość wygodniejszą w użyciu !!! #include <iostream> #include <ctime> #include <cmath>
using namespace std;
struct PUNKT { double x, y, z; string nazwa; double odleglosc( const PUNKT p ) { return sqrt(( x - p.x ) *( x - p.x ) +( y - p.y ) *( y - p.y ) +( z - p.z ) *( z - p.z ) ); } };
int main() { srand( time( NULL ) ); int n; cout << "Podaj ile chcesz wylosowac punktow: " << endl; cin >> n; PUNKT * tab = new PUNKT[ n ]; for( int i = 0; i < n; i++ ) { tab[ i ].x = rand() % 100 - 50; tab[ i ].y = rand() % 100 - 50; tab[ i ].z = rand() % 100 - 50; } cout << tab[ 0 ].odleglosc( tab[ 1 ] ) << endl; delete[] tab; return 0; } |
|
« 1 » |