Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Palindromy

Ostatnio zmodyfikowano 2016-01-16 05:00
Autor Wiadomość
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:
C/C++
#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.
P-143537
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"

C/C++
#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 ) { // sprawdzamy jak daleko poszło a na boki ??
                    fragment = test.substr( i - a + 1, 2 * a - 1 ); // tytaj kopiowanie substringa. Pierwszy parametr to pozycja a drugi to rozmiar
                    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"
C/C++
#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();
            }
        }
    }
}
P-143539
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.

C/C++
#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;
}
P-143570
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 !!!

C/C++
#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;
}
P-143572
« 1 »
  Strona 1 z 1