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

tablice,powtarzenie

Ostatnio zmodyfikowano 2015-11-17 22:29
Autor Wiadomość
Detroq
Temat założony przez niniejszego użytkownika
tablice,powtarzenie
» 2015-11-17 14:24:23
Cześć mam takie zadanie do zrobienia i nie mam pomysłu jak się za to zabrać
Napisz program wczytujący z klawiatury zawartość 24 elementowej tablicy liczb float,
przechowującej wartości temeratur powietrza mierzonych co godzinę przez cały dzień.
Następnie program powinien sprawdzić, czy któraś z tych wartości się powtarza,
a jeżeli tak, to która powtarza się najczęściej.

Potrafię zrobić tą łatwą cześć ale później nie mam pomysłu jak zacząć, może ktoś poda jakiś
C/C++
#include <iostream>
#include <windows.h>

using namespace std;


int main( int argc, char ** argv )
{
    const int rozm = 24;
    float tab[ rozm ];
   
    for( int i = 0; i < rozm; i++ )
    {
        cout << "Podaj wartosc Tab[" << i + 1 << "]: ";
        cin >> tab[ i ];
       
    }
   
   
   
    system( "cls" );
    cout << "Oto zawartosc tablicy!" << endl;
    for( int i = 0; i < rozm; i++ )
    {
        cout << "Tab[" << i + 1 << "]: " << tab[ i ] << endl;
    }
   
   
   
    return 0;
}
[/i]
P-140294
carlosmay
» 2015-11-17 14:58:36
C/C++
const int = 24;
 to jest oczywisty błąd.

Potrafię zrobić tą łatwą cześć ale później nie mam pomysłu jak zacząć
 
  • pierwszy element tablicy porównujesz z pozostałymi, jak znajdziesz taki sam to dodajesz jakiś licznik.
  • drugi element tablicy  porównujesz z pozostałymi, jak wyżej.
  • //...
  • ostatni, tak samo
  • na koniec wypisujesz max licznik i wartość, która jest za niego odpowiedzialna

Czytaj zamieszczony post jak wstawisz. Braki w kodzie przez brak znaczników.
Czytanie tego to koszmar
 
P-140295
Bornegio
» 2015-11-17 15:05:10
Spróbuj napisać pętle for, która każdą zmienną w tablicy porówna z pozostałymi i jeśli jakaś się powtórzy to niech zwiększy licznik. Potem pod koniec sprawdzania danej zmiennej niech porówna licznik ze zmienna i jeśli jest większy to niech ją nadpisze. i przypisze tę zmienną jako najczęściej powtarzaną. Słabo to wytłumaczyłem, to może przykładowy kod ci to troszkę wyjaśni.

int licznik = 0;
float najczesciejPowtarzana;
int liczbaPowtorzen = 0;

for (int i = 0; i < rozm; i++)
{
     for (int j = 0; j < rozm; j++)
     {
          //zabezpieczamy sie, żeby nie porównywało zmiennej z samą sobą i porownujemy ja z pozostalymi zmiennymi w tablicy
          if (i != j && tab[.i] == tab[j])
               licznik++;
      }
      //Teraz sprawdza, czy jest najczęściej powtarzającą się liczbą
      if (licznik > liczbaPowtorzen)
      {
          liczbaPowtorzen = licznik;
          najczesciejPowtarzana = tab[.i];
      }
                      
}

W indeksie tablicy przed "i" nie powinno być kropki. Wstawiłem ją, żeby nie traktowało jej jak BBcode
P-140296
carlosmay
» 2015-11-17 15:12:15
//zabezpieczamy sie, żeby nie porównywało zmiennej z samą sobą i porownujemy ja z pozostalymi zmiennymi w tablicy
 Liczba występuje w tablicy przynajmniej raz, więc przy tym zabezpieczeniu 
C/C++
int liczbaPowtorzen = 0;
 powinna startować od jedynki.
P-140297
Bornegio
» 2015-11-17 15:15:30
Faktycznie się rozpędziłem. Po prostu lepiej zrezygnować z tego warunku i sprawdzić tylko, czy się powtarza i potem przed ew. wyświetleniem najczęściej powtarzającej się liczby sprawdzić, czy liczbaPowtorzen > 1
P-140298
Detroq
Temat założony przez niniejszego użytkownika
» 2015-11-17 22:05:59
dzięki wielkie za pomoc, zrobiłem to trochę na swój sposób, co o nim myślicie ?, jest optymalny czy da sie go bardziej zoptymalizować ?

C/C++
#include <iostream>
#include <windows.h>

using namespace std;


int main( int argc, char ** argv )
{
    const int rozm = 24;
    float tab[ rozm ];
    float wartosc;
    float tab2[ rozm ] = { 0 };
    int max = 0;
    for( int i = 0; i < rozm; i++ )
    {
        cout << "Podaj wartosc Tab[" << i + 1 << "]: ";
        cin >> tab[ i ];
       
    }
   
   
   
    system( "cls" );
    cout << "Oto zawartosc tablicy!" << endl;
    for( int i = 0; i < rozm; i++ )
    {
        cout << "Tab[" << i + 1 << "]: " << tab[ i ] << endl;
    }
   
   
   
    for( int i = 0; i < rozm; i++ )
    {
       
        for( int j = 0; j < rozm; j++ )
        {
            if( tab[ i ] == tab[ j ] )
                 tab2[ i ] ++;
           
        }
       
       
       
       
        if( tab2[ i ] > max )
        {
            max = tab2[ i ];
            wartosc = tab[ i ];
        }
       
    }
   
   
   
   
    cout << "Najczesciej powtarzana liczba to : " << wartosc << " i powtarza sie ona "
    << max << " razy";
   
   
    return 0;
}
P-140320
Monika90
» 2015-11-17 22:29:48
Funkcja system wymaga dołączenia <cstdlib>, za to <windows.h> nie jest do niczego tutaj potrzebne.
P-140322
« 1 »
  Strona 1 z 1