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

C++ problem z programem

Ostatnio zmodyfikowano 2018-08-26 15:30
Autor Wiadomość
tomeq35
Temat założony przez niniejszego użytkownika
C++ problem z programem
» 2018-08-24 11:01:38
Witam, mam problem z moim programem co prawda znalazłem podobny problem na forum lecz nie był on rozwiązany do końca. Mój program nie działa poprawnie, proszę o pomoc i ewentualne wskazówki jak można go inaczej (lepiej) napisać.

Zadanie:

Program wczytuje dane z klawiatury do tablicy typu double, a następnie sprawdza:

1.czy te liczby są uporządkowane rosnąco lub malejąco,
2.czy elementy tablicy mają symetryczną zawartość (tj. pierwszy element równy ostatniemu, drugi przedostatniemu, itd.)
3.czy w tablicy występuje chociaż jedno powtórzenie wartości

C/C++
#include <iostream>

using namespace std;

int main()
{
    const int rozmiar = 5;
    double tablica[ rozmiar ];
   
    cout << "Podaj dane do tablicy: " << endl;
    for( int i = 0; i < rozmiar; i++ )
    {
        cin >> tablica[ i ];
    }
    cout << endl;
    for( int i = 0; i < rozmiar; i++ )
         cout << tablica[ i ] << endl;
   
    for( int i = 0; i < rozmiar; i++ )
    if( tablica[ i ] < tablica[ i + 1 ] )
    {
        cout << "Uporzadkowane rosnaco" << endl;
    }
    else if( tablica[ i ] > tablica[ i + 1 ] )
         cout << "Uporzadkowane malejaco" << endl;
   
    for( int i = 0; i < rozmiar; i++ )
    {
        if( tablica[ i ] == tablica[ rozmiar - 1 - i ] )
             cout << "Jest symetryczna";
       
        else
             cout << "Jest niesymetryczna";
       
    }
   
    // jak zrealizować sprawdzanie czy się powtórzyły ???
   
    return 0;
}
P-172198
pekfos
» 2018-08-24 11:48:33
P-172199
tomeq35
Temat założony przez niniejszego użytkownika
C++ problem z programem
» 2018-08-24 16:27:58
Witam, po modyfikacji kodu program działa, pytanie tylko czy można go jeszcze zoptymalizować? Brakuje mi jeszcze tylko funkcji, która sprawdzi czy w tablicy powtarzają się jakieś elementy. Tutaj brak mi pomysłu, ktoś podpowie?

C/C++
#include <iostream>

using namespace std;

const int r = 5;
int tab[ r ];

bool rosnie( int * tab )
{
    for( int i = 0; i < r - 1; i++ )
    {
        if( !( tab[ i ] < tab[ i + 1 ] ) )
             return false;
       
    }
    return true;
}

bool maleje( int * tab )
{
    for( int i = 0; i < r - 1; i++ )
    {
        if( !( tab[ i ] > tab[ i + 1 ] ) )
             return false;
       
    }
    return true;
}

bool sym( int * tab )
{
    for( int i = 0; i < r / 2; i++ ) //czy tutaj moze byc i < r czy i < r/2 ???
    {
        if( !( tab[ i ] == tab[ r - 1 - i ] ) )
             return false;
       
    }
    return true;
   
}

int main()
{
    cout << "Hello world!" << endl;
   
    cout << "podaj elementy: " << endl;
    for( int i = 0; i < r; i++ )
         cin >> tab[ i ];
   
    cout << endl;
    for( int i = 0; i < r; i++ )
         cout << tab[ i ] << endl;
   
    cout << endl;
   
    rosnie( tab );
    maleje( tab );
    sym( tab );
   
   
   
    if( rosnie( tab ) == true ) cout << "rosnaca";
    else if( maleje( tab ) == true ) cout << "malejaca";
    else if( sym( tab ) == true ) cout << "symetryczna";
    else cout << "Zaden z warunkow nie jest spelniony";
   
    return 0;
}
P-172201
pekfos
» 2018-08-24 17:18:15
Brakuje mi jeszcze tylko funkcji, która sprawdzi czy w tablicy powtarzają się jakieś elementy. Tutaj brak mi pomysłu, ktoś podpowie?
Redukcja problemu. Czy tablica jednoelementowa ma powtórzenia? Nie. Czy tablica N+1 elementowa ma powtórzenia? To zależy czy ten +1 element zawiera się w pierwszych N elementach i czy te pierwsze N elementów same nie ma powtórzeń.
P-172202
tomeq35
Temat założony przez niniejszego użytkownika
C++ problem z programem
» 2018-08-24 17:29:13
pekfos, ja jestem początkującym i nie za bardzo rozumiem twojej podpowiedzi, mógłbyś jakoś prościej tak dla laika ? Dzięki.
P-172203
pekfos
» 2018-08-24 17:54:00
To bym cię musiał zapytać o wykształcenie, bo to co opisałem to nic innego jak indukcja matematyczna. To jeden z takich problemów, w którym nie sposób zgadnąć, czy ktoś nie chce myśleć, czy po prostu jest w podstawówce. Jeśli tablica N-elementowa nie ma powtórzeń, to tablica N+1 elementowa ma powtórzenia tylko wtedy, gdy dodany element się powtarza. Znasz wartość dodanego elementu, sprawdzenie czy wystąpił do tej pory w tablicy jest trywialne. Tablica 1-elementowa nie ma powtórzeń, bo i nie ma jak. Dodajesz kolejny element i jeśli się powtarza, to koniec algorytmu, jeśli nie, to masz 2-elementową tablicę bez powtórzeń. I tak dalej do wyczerpania danych.
Alternatywnie, podobne zagadnienie jest opisane w kursie
» Kurs C++ » Poziom 2Losowanie bez powtórzeń lekcja
P-172204
mateczek
» 2018-08-24 18:19:16
np tak
C/C++
#include <iostream>
#include<vector>
using namespace std;
bool isDuplicate( vector < int > & t ) {
    for( size_t i = 0; i < t.size() - 1; i++ ) {
        for( size_t j = i + 1; j < t.size(); j++ ) {
            if( t[ i ] == t[ j ] ) return true;
           
        }
    }
    return false;
}
int main() {
    vector < int > tablica { 33, 77, 2, 3, 4, 8, 24, 7, 343 };
    cout << std::boolalpha << isDuplicate( tablica ) << endl;
}
P-172205
tomeq35
Temat założony przez niniejszego użytkownika
C++ problem z programem
» 2018-08-24 18:36:34
Dzięki za podpowiedzi, mateczek zrobiłem to według twojego wzoru.
C/C++
bool powt( int * tab )
{
    for( int i = 0; i < r; i++ )
    {
        for( int j = i + 1; j < r; j++ )
        {
            if( tab[ i ] == tab[ j ] )
                 return true;
           
        }
    }
    return false;
}
Teraz jeszcze przydało by się wypisać które elementy się powtarzają i ile razy.
P-172206
« 1 » 2
  Strona 1 z 2 Następna strona