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

[POZIOM 2]Pętla for zadanie 3

Ostatnio zmodyfikowano 2016-01-03 17:49
Autor Wiadomość
Erpeg
Temat założony przez niniejszego użytkownika
[POZIOM 2]Pętla for zadanie 3
» 2016-01-03 15:50:28
Witam czytając sobie krok po kroku kurs dostępny na stronie wykonuje sobie zadania które tutaj są zawarte pod koniec każdego tematu.
Zrobiłem ostatnie(3) zadanie z tematu o pętli for. Jestem osobiście zadowolony z tego jak zadanie wykonałem bo moje funkcje będą działać z nieokreślonym zbiorem/przedziałem liczb, mimo że w zadaniu był jasno określony przedział i ich wartość.
Przejdę do pytania, jak mogę ulepszyć mój kod który znajduje się poniżej. Dokładnie chodzi mi o funkcje znajdowania największej i najmniejszej liczby ze zbioru, musiałem użyć dodatkowej zmiennej aby zapewnić sobie uniwersalność tych funkcji. Moje pytanie czy da się uzyskać ta sama funkcjonalność bez użycia dodatkowej zmiennej? Bo wiem, że gdybym miał przedział liczb od 10-30, i określoną ich ilośc to bym mógł to ustawić na sztywno w pętli for, spełniłbym zadanie no ale chcę tej uniwersalności.
Tak samo z funkcją wypisania liczb "od tyłu", również nie umiałem uzyskać efektu bez wykorzystania dodatkowej zmiennej tak aby uzyskać uniwersalność kodu. Tzn bez ingerowania w dane które przychodzą jako argumenty.

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

/*
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
*/

using namespace std;

void losujLiczby( int tab[], int ile )
{
    for( int i = 0; i < ile; i++ )
    {
        tab[ i ] =( rand() % 21 ) + 10;
    }
}

void wypiszLiczby( int tab[], int ile )
{
    cout << "------Liczby od przodu-------" << endl;
    for( int i = 0; i < ile; i++ )
    {
        cout << tab[ i ] << " ";
    }
    cout << endl;
    cout << "-----------------------------";
    cout << endl;
}

void wypiszLiczbyOdTylu( int tab[], int ile )
{
    cout << "------Liczby od tylu---------" << endl;
    int liczba = ile;
    for( int i = 0; i < ile; i++ )
    {
        liczba--;
        cout << tab[ liczba ] << " ";
    }
    cout << endl;
    cout << "-----------------------------";
    cout << endl;
}

int znajdzNajwieksza( int tab[], int ile )
{
    int najwiekszaLiczba = tab[ 0 ];
   
    for( int i = 0; i < ile; i++ )
    {
        if( tab[ i ] > najwiekszaLiczba )
             najwiekszaLiczba = tab[ i ];
       
    }
   
    return najwiekszaLiczba;
}


int znajdzNajmniejsza( int tab[], int ile )
{
    int najmniejszaLiczba = tab[ 0 ];
   
    for( int i = 0; i < ile; i++ )
    {
        if( tab[ i ] < najmniejszaLiczba )
             najmniejszaLiczba = tab[ i ];
       
    }
    return najmniejszaLiczba;
}


void wypiszMinMax( int a, int b )
{
    cout << "Najwieksza liczba to: " << a << endl;
    cout << "Najmniejsza liczba to: " << b << endl;
}

int main()
{
    srand( time( NULL ) ); //Konfigurowanie maszyny losujacej
    int ilerazy = 10; //Ile liczb ma brac udzial w programie
    int dane[ ilerazy ]; //Pojemnik na dane
   
    losujLiczby( dane, ilerazy ); //Wywolanie funkcji losujacej liczby i przypisujacej do tablicy
    wypiszLiczby( dane, ilerazy ); //Wywolanie funkcji wypisujacej liczby od poczatku do konca
    wypiszLiczbyOdTylu( dane, ilerazy ); //Wywoalnie funkcji wypisujacej licby od tylu do przodu
   
    int iMax = znajdzNajwieksza( dane, ilerazy ); //Przypisowanie wyniku dzialania funkcji
    int iMin = znajdzNajmniejsza( dane, ilerazy ); //Przypisowanie wyniku dzialania funkcji
   
    wypiszMinMax( iMax, iMin ); //Wypisanie najwiekszej i najmniej liczby ze zbioru
   
    return 0;
}
P-142773
carlosmay
» 2016-01-03 16:48:09
C/C++
void losujLiczby( int tab[], int ile )
{
    for( int i = 0; i < ile; i++ )
    {
        tab[ i ] =( rand() % 21 ) + 10; // uzywanie stalych nie jest uniwersalne
    }
}
 Dla uniwersalności użyj zmiennych z możliwością wprowadzania przez użytkownika.

C/C++
void wypiszLiczbyOdTylu( int tab[], int ile )
{
    cout << "------Liczby od tylu---------" << endl;
    int liczba = ile; // ta zmienna nie jest do niczego potrzebna
    for( int i = 0; i < ile; i++ )
    {
        liczba--;
        cout << tab[ liczba ] << " ";
    }
    cout << endl;
    cout << "-----------------------------";
    cout << endl;
}
 puść pętlę od końca.
P-142776
Erpeg
Temat założony przez niniejszego użytkownika
» 2016-01-03 17:49:09
Dzięki za podpowiedzi, też tak myślałem żeby puścić tą pętle od końca ale nie umiałem sobie tego jakoś wyobrazić i uznałem że to się nie uda. No ale skoro potwierdziłeś że się da, to po kilku nieudanych próbach w końcu udało mi się to zrobić, nie takie to straszne :P
Co do funkcji losującej liczby fakt, miło by było zaimplementować zakres wybierany przez użytkownika ale nie chciałem komplikować zadania. Ale skusiłem się jednak dodać taką funkcjonalność. Dodałem też wpisywanie ilości liczb które mają być brane pod uwagę w programie.
W takim razie jeszcze została kwestia tych zmiennych w funkcjach do wyboru największej i najmniejszej liczby.

Dzięki carlosmay1 Za to że nie dałeś mi gotowego rozwiązania. Może komuś przyda się kod żeby porównać ze swoim:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

/*
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
*/

using namespace std;

int wybierzLiczby()
{
    int ilosc;
   
    cout << "Wybierz ilosc liczb: " << endl;
    cin >> ilosc;
   
    return ilosc;
}

int wybierzZakresOd()
{
    int start;
   
    cout << "Wybierz zakres liczb od: " << endl;
    cin >> start;
   
    return start;
}

int wybierzZakresDo()
{
    int stop;
   
    cout << "Wybierz zakres liczb do: " << endl;
    cin >> stop;
   
    return stop;
}

void losujLiczby( int tab[], int ile, int start, int stop )
{
    for( int i = 0; i < ile; i++ )
    {
        //tab[i] = ( rand() % 21 ) + 10;
        tab[ i ] =( rand() %( stop - start ) ) + start;
    }
}

void wypiszLiczby( int tab[], int ile )
{
    cout << "------Liczby od przodu-------" << endl;
    for( int i = 0; i < ile; i++ )
    {
        cout << tab[ i ] << " ";
    }
    cout << endl;
    cout << "-----------------------------";
    cout << endl;
}

void wypiszLiczbyOdTylu( int tab[], int ile )
{
    cout << "------Liczby od tylu---------" << endl;
    for( int i = ile; i > 0; i-- )
    {
        ile--;
        cout << tab[ ile ] << " ";
    }
   
    cout << endl;
    cout << "-----------------------------";
    cout << endl;
}

int znajdzNajwieksza( int tab[], int ile )
{
    int najwiekszaLiczba = tab[ 0 ];
   
    for( int i = 0; i < ile; i++ )
    {
        if( tab[ i ] > najwiekszaLiczba )
             najwiekszaLiczba = tab[ i ];
       
    }
   
    return najwiekszaLiczba;
}


int znajdzNajmniejsza( int tab[], int ile )
{
    int najmniejszaLiczba = tab[ 0 ];
   
    for( int i = 0; i < ile; i++ )
    {
        if( tab[ i ] < najmniejszaLiczba )
             najmniejszaLiczba = tab[ i ];
       
    }
    return najmniejszaLiczba;
}


void wypiszMinMax( int a, int b )
{
    cout << "Najwieksza liczba to: " << a << endl;
    cout << "Najmniejsza liczba to: " << b << endl;
}

int main()
{
    srand( time( NULL ) ); //Konfigurowanie maszyny losujacej
    int ilerazy = wybierzLiczby(); //Wczytuje ilosc liczb do udzialu w programie
   
    int dane[ ilerazy ]; //Pojemnik na dane
   
    int a = wybierzZakresOd(); //Wczytuje start zakresu liczb do udzialu w programie
    int b = wybierzZakresDo(); //Wczytuje stop zakresu liczb do udzialu w programie
   
    losujLiczby( dane, ilerazy, a, b ); //Wywolanie funkcji losujacej liczby i przypisujacej do tablicy
    wypiszLiczby( dane, ilerazy ); //Wywolanie funkcji wypisujacej liczby od poczatku do konca
    wypiszLiczbyOdTylu( dane, ilerazy ); //Wywoalnie funkcji wypisujacej licby od tylu do przodu
   
    int iMax = znajdzNajwieksza( dane, ilerazy ); //Przypisowanie wyniku dzialania funkcji
    int iMin = znajdzNajmniejsza( dane, ilerazy ); //Przypisowanie wyniku dzialania funkcji
   
    wypiszMinMax( iMax, iMin ); //Wypisanie najwiekszej i najmniej liczby ze zbioru
   
    return 0;
}
P-142780
« 1 »
  Strona 1 z 1