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

[Lekcja 22] Szukanie liczby minimalnej i maksymalnej w tablicy

Ostatnio zmodyfikowano 2017-06-24 13:39
Autor Wiadomość
Rafals
Temat założony przez niniejszego użytkownika
[Lekcja 22] Szukanie liczby minimalnej i maksymalnej w tablicy
» 2012-06-25 11:51:46
Treść lekcji i zadania ( zadanie 3): » Kurs C++ » Poziom 2Pętla for lekcja
Mój kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int wylosujLiczby()
{
    int wylosowana = 0;
    return wylosowana =( rand() % 21 ) + 10;
}

void zapiszTablice( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
    {
        int a = wylosujLiczby();
        tablica[ indeks ] = a;
    }
}

void wypiszLiczbyPK( int tablica[], int ile )
{
    for( int indeks = 0; indeks < ile; indeks++ )
         std::cout << tablica[ indeks ] << ", ";
   
}

void wypiszLiczbyKP( int tablica[], int ile )
{
    for( int indeks = ile; indeks >= 0; indeks-- )
         std::cout << tablica[ indeks ] << ", ";
   
}

int znajdzMIN( int tablica[], int ile )
{
    int liczba = tablica[ 0 ];
    for( int indeks = 0; indeks < ile; indeks++ )
    {
        for( liczba; liczba > tablica[ indeks ]; )
             liczba = tablica[ indeks ];
       
    }
    return liczba;
}

int znajdzMAX( int tablica[], int ile )
{
    int liczba = tablica[ 0 ];
   
    for( int indeks = 0; indeks < ile; indeks++ )
    {
        for( liczba; liczba < tablica[ indeks ]; )
             liczba = tablica[ indeks ];
       
    }
    return liczba;
}

void wypiszMINMAX( int lMIN, int lMAX )
{
    std::cout << "\nMinimalna wylosowana liczba: " << lMIN << std::endl << "Maksymalna wylosowana liczba: " << lMAX;
}
int main()
{
    srand( time( NULL ) );
   
    int tab[ 10 ];
   
    zapiszTablice( tab, 10 );
    wypiszLiczbyPK( tab, 10 );
    std::cout << std::endl;
    wypiszLiczbyKP( tab, 9 );
    int lMAX = znajdzMAX( tab, 10 );
    int lMIN = znajdzMIN( tab, 10 );
    wypiszMINMAX( lMIN, lMAX );
}

Proszę tylko o sprawdzenie funkcji "znajdzMIN" i "znajdzMAX". Wyniki są prawidłowe tylko pętla for w pętli for dziwnie to wygląda (chodzi o braki w drugiej pętli). Jak tak sobie analizuje krok po kroku to ok. Z kolei jak nie zadeklarowałem w drugiej pętli for "liczba" to program nie wyszukał tych liczb. Czyli mam rozumieć, że wpisał sobie losową wartość? Czyli wartość do warunku pętla pobiera z deklaracji przed pierwszym ";"? Co jeżeli po 2 ";" nie ma nic? Wykona daną pętlę tylko raz z tego wynika.?

EDIT1 ano nic dopóki nie było dalszej części postu:P sprawdzałem jak się wkleja linki i okazało się, że muszę wpierw przeszukać forum.
P-59051
DejaVu
» 2012-06-25 11:56:04
No i co w związku z tym?

/edit:
No widzę, że dopisałeś już posta.

C/C++
int znajdzMIN( int tablica[], int ile )
{
    int liczba = tablica[ 0 ];
    for( int indeks = 0; indeks < ile; indeks++ )
    {
        if( tablica[ indeks ] < liczba )
             liczba = tablica[ indeks ];
       
    }
    return liczba;
}
Analogicznie z maksem. Przeanalizuj :)
P-59052
Rafals
Temat założony przez niniejszego użytkownika
» 2012-06-25 12:19:53
Hmm chodzi o to, że w zadaniu jest zapis iż " Można używać tylko pętli for" :P. Więc siedziałem 30 min i wymyśliłem. Jak mówiłem wyniki są poprawne w przypadku for + for jak i for + if.
Tylko nie wiem czy do końca rozumiem działanie pętli "for" w tym przypadku.
C/C++
int a;
for( a; a == 0; )
     std::cout << "";

Czyli:
Jeżeli, na początku "a" byśmy przypisali "0" to wykona instrukcję tylko raz gdyż nie zadeklarowaliśmy zmian po pierwszym sprawdzeniu warunku pętli.
Jeżeli, na początku "a" byśmy przypisali liczbę różną od "0" to nie wykona instrukcji, a pętlę sprawdzi tylko raz gdyż nie zadeklarowaliśmy zmian po pierwszym sprawdzeniu warunku pętli.
Tak to rozumiem.
Oraz aby wyżej wymienione "cudo" zadziałało to trzeba zadeklarować stan początkowy, gdyż warunek końcowy pobiera "a" ze stanu początkowego?
P-59053
DejaVu
» 2012-06-25 12:22:08
Kod, który podałeś ma niezdefiniowane zachowanie.

/edit:
A w rozdziale nie widzę stwierdzenia, które zabrania używania instrukcji warunkowej if.
P-59054
Rafals
Temat założony przez niniejszego użytkownika
» 2012-06-25 12:26:41
Napisz program który wykona wszystkie poniższe kroki w podanej kolejności:

    Losuje 10 liczb z przedziału od 10 do 30 włącznie i zapisuje je do tablicy;
    Wypisuje 10 wylosowanych liczb od początku do końca;
    Wypisuje 10 wylosowanych liczb od końca do początku;
    Znajduje najmniejszą oraz największą wylosowaną liczbę.
    Wypisuje najmniejszą i największą wylosowaną liczbę.

Program nie może używać pętli innych niż pętla
for
.
P-59055
DejaVu
» 2012-06-25 12:29:12
Program nie może używać pętli innych niż pętla for
P-59056
Rafals
Temat założony przez niniejszego użytkownika
» 2012-06-25 12:32:26
Umm no tak :D Przepraszam. Anyway mój kod działa poprawnie :P. Dlaczego jeżeli mówisz, że ma niezdefiniowane zachowanie, tego to już nie wiem :P. Dlatego chciałem dopytać dokładniej o pętlę for.
P-59057
DejaVu
» 2012-06-25 12:33:45
Bo nie masz żadnej gwarancji jaką wartość początkową będzie miała zmienna 'a'.
P-59058
« 1 » 2
  Strona 1 z 2 Następna strona