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: int tablicaZnajdzNajwieksza( int t[], int rozmiar ) { int ktora, wieksza, najwieksza; for( ktora = 0; ktora < rozmiar; ktora++ ) { wieksza = 0; 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): #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; 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; }
|
|
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. |
|
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. |
|
Kinexity |
» 2017-05-29 20:28:29 W tym wypadku wybrałeś trudniejsze podejście - nie tylko w wydajnością ale i konstrukcją. 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; }
|
|
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). |
|
Kinexity |
» 2017-05-29 23:17:24 |
|
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.
|
|
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. |
|
« 1 » 2 |