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

[Rozdział 22] Funkcja znajdująca największą wartość ze zmiennych zawartych w tablicy.

Ostatnio zmodyfikowano 2017-05-31 19:17
Autor Wiadomość
DieG
Temat założony przez niniejszego użytkownika
[Rozdział 22] Funkcja znajdująca największą wartość ze zmiennych zawartych w tablicy.
» 2017-05-29 19:28:57
Problem jak w temacie. Napisałem funkcję, która znajdzie największą wartość na podstawie porównywania kolejnych zmiennych do całej tablicy jednak nie działa według założeń. Nie do końca rozumiem co może być złego w zapisie.

Funkcja:
C/C++
int tablicaZnajdzNajwieksza( int t[], int rozmiar )
{
    int ktora, wieksza, najwieksza;
   
    for( ktora = 0; ktora < rozmiar; ktora++ )
    {
        wieksza = 0; // wyzeruj licznik "wieksza" przy starcie sprawdzania
       
       
        for( int i; i < rozmiar; i++ )
        {
            if( t[ ktora ] > t[ i ] )
                 wieksza++;
           
        }
        if( wieksza >( rozmiar - 1 ) )
             najwieksza = t[ ktora ];
       
    }
   
    return najwieksza;
}


Cały program (nadal w trakcie tworzenia):
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;



void tablicaWypelnij( int t[], int rozmiar )
{
    int liczba;
   
    for( int i = 0; i < rozmiar; i++ )
    {
        liczba = rand() %( rozmiar + 1 ) + 10;
       
        t[ i ] = liczba;
    }
}


void tablicaWypisz( int t[], int rozmiar )
{
    for( int i = 0; i < rozmiar; i++ )
         cout << t[ i ] << endl;
   
}


void tablicaWypiszOdKonca( int t[], int rozmiar )
{
    for( int i = rozmiar - 1; i >= 0; i-- )
         cout << t[ i ] << endl;
   
}


int tablicaZnajdzNajwieksza( int t[], int rozmiar )
{
    int ktora, wieksza, najwieksza;
   
    for( ktora = 0; ktora < rozmiar; ktora++ )
    {
        wieksza = 0; // wyzeruj licznik "wieksza" przy starcie sprawdzania
       
       
        for( int i; i < rozmiar; i++ )
        {
            if( t[ ktora ] > t[ i ] )
                 wieksza++;
           
        }
        if( wieksza >( rozmiar - 1 ) )
             najwieksza = t[ ktora ];
       
    }
   
    return najwieksza;
}


int tablicaZnajdzNajmniejsza( int t[], int rozmiar )
{
   
}




int main()
{
    srand( time( 0 ) );
   
    int zbior[ 10 ];
    int rozmiar_zbior = 10;
   
    cout << "Losuje liczby..." << endl << endl;
    tablicaWypelnij( zbior, rozmiar_zbior );
   
    cout << "Wypisuje liczby..." << endl;
    tablicaWypisz( zbior, rozmiar_zbior );
   
    cout << endl << "Wypisuje liczby od konca..." << endl;
    tablicaWypiszOdKonca( zbior, rozmiar_zbior );
   
    cout << endl << "Szukam najwiekszej i najmniejszej liczby z wylosowanych..." << endl;
    int najwieksza = tablicaZnajdzNajwieksza( zbior, rozmiar_zbior );
    int najmniejsza = tablicaZnajdzNajmniejsza( zbior, rozmiar_zbior );
   
    cout << endl << "Najwieksza = " << najwieksza << endl;
    cout << endl << "Najmniejsza = " << najmniejsza << endl;
   
    return 0;
}
P-161733
Kinexity
» 2017-05-29 20:03:42
A nie lepiej po kolei sprawdzać elementy niż porównywać każdy element z pozostałymi? To jest straszna strata mocy obliczeniowej przy złożoności n^2.
P-161743
DieG
Temat założony przez niniejszego użytkownika
» 2017-05-29 20:15:57
Z zasady najpierw próbuję zrobić coś co działa, potem upraszczam/zmieniam zapis na szybszy do wykonania.
P-161746
Kinexity
» 2017-05-29 20:28:29
W tym wypadku wybrałeś trudniejsze podejście - nie tylko w wydajnością ale i konstrukcją.
C/C++
int tablicaZnajdzNajwieksza( int t[], int rozmiar )
{
    int ktora, najwieksza = 0x80000000;
    for( ktora = 0; ktora < rozmiar; ktora++ )
    {
        najwieksza =( t[ ktora ] > najwieksza ? t[ ktora ]: najwieksza );
    }
    return najwieksza;
}
P-161747
DieG
Temat założony przez niniejszego użytkownika
» 2017-05-29 20:59:03
I jestem w trakcie realizowania kursu, czyli rzeczy które wypisałeś niezbyt przemawiają do wiadomości jakie dotąd przyswoiłem (Poziom 1 i 2).
P-161752
Kinexity
» 2017-05-29 23:17:24
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-2/Petla-for/294 - pętla for
https://pl.wikipedia.org/wiki​/Operator_warunkowy - operator ternarny
No chyba już przypisywanie wartości w systemie szesnastkowym nie wymaga tłumaczenia.
P-161761
DieG
Temat założony przez niniejszego użytkownika
» 2017-05-30 00:01:13
Nie jest aż tak źle żeby linkować pętlę for. :P

Operator ternarny na pewno przyswoję - zapis jest o wiele krótszy i wyraźniej widać co się dzieje. Dzięki.

Czy konieczny jest zapis "int najwieksza = 0x80000000;" ? W tym wypadku program operuje na określonym przedziale liczb, więc będzie widać po wyniku czy coś poszło nie tak.
Jutro zobaczę jak to wygląda.
P-161766
Kinexity
» 2017-05-30 00:25:08
Zapis
int najwieksza = 0x80000000;
 nie jest konieczny, ale wstawiłem tak dlatego, że program może potencjalnie pracować na pełnym zakresie typu int, a 0x80000000 to po prostu -2147483648, czyli najmniejsza możliwa liczba możliwa w tym typie - gwarancja tego, że na pewno nie zdarzy się tak, że wszystkie liczby będą od niej mniejsze i przez to tak naprawdę program nie pokaże prawdziwej największej wartości.
P-161767
« 1 » 2
  Strona 1 z 2 Następna strona