Program 14. #include <iostream> #include <ctime> using namespace std;



Podobne dokumenty
void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Program 22. #include <iostream> using namespace std; struct Osoba { string Imie; string Nazwisko; char Plec; int RokUr; };

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Wstęp do programowania

Część 4 życie programu

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Wstęp do programowania

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Programowanie komputerowe. Zajęcia 1

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

lekcja 8a Gry komputerowe MasterMind

Podstawy Programowania Podstawowa składnia języka C++

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Przekazywanie argumentów wskaźniki

Wstęp do programowania

Struktura pliku projektu Console Application

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

5. Rekurencja. Przykłady

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Programowanie - wykład 4

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

I - Microsoft Visual Studio C++

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Wstęp do Informatyki

Podstawy algorytmiki i programowania - wykład 3 Funkcje rekurencyjne Wyszukiwanie liniowe i binarne w tablicy

1 Podstawy c++ w pigułce.

Programowanie i struktury danych

1 Podstawy c++ w pigułce.

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Wstęp do programowania

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rekurencje. Jeśli algorytm zawiera wywołanie samego siebie, jego czas działania moŝe być określony rekurencją. Przykład: sortowanie przez scalanie:

Podstawy programowania skrót z wykładów:

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Zadanie 2: Arytmetyka symboli

Inicjacja tablicy jednowymiarowej

Struktury Struktura polami struct struct struct struct

Programowanie komputerowe. Zajęcia 4

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Liczby całkowite i rzeczywiste

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Pytania sprawdzające wiedzę z programowania C++

Wstęp do programowania

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe i C++ dla matematyków

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Wstęp do programowania

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie obiektowe W3

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Wstęp do Programowania, laboratorium 02

C++ wprowadzanie zmiennych

Programowanie komputerowe. Zajęcia 3

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania

Pytania dla języka C++

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

4. Funkcje. Przykłady

Mechanizm dziedziczenia

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Wprowadzenie do programowania i programowanie obiektowe

Wstęp do informatyki- wykład 9 Funkcje

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Techniki Programowania przeładowanie funkcji

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawy Programowania C++

Wstęp do informatyki- wykład 11 Funkcje

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

STL: Lekcja 1&2. Filozofia STL

Podstawy Programowania.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Transkrypt:

Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału z którego mają być losowane elementy tablicy; * funkcję zwracającą najmniejszy element tablicy podanej jako parametr o długości podanej jako parametr; * funkcję zwracającą wartość logiczną informującą, czy tablica zawiera powtórzenia. Wykorzystać powyŝsze funkcje w programie generującym tablicę losowych liczb całkowitych z przedziału podanego przez uŝytkownika, o długości podanej przez uŝytkownika. Program ma wypisywać uzyskaną tablicę, a następnie - w zaleŝności od decyzji uŝytkownika - albo informować jaka jest najmniejsza liczba w tej tablicy, albo informować, czy tablica zawiera powtórzenia. #include <iostream> #include <ctime> using namespace std; void Losuj(int t[],int r,int a,int b); void Wypisz(int tab[],int n); int Minimalny(int tab[],int n); bool Powtorzenia(int tab[],int r); int main () int n; char znak; int pp,kp; cout<<"podaj rozmiar tablicy: "; cin>>n; int liczby[n]; cout<<"podaj poczatek przedzialu z ktorego maja byc losowane liczby: "; cin>>pp; cout<<"podaj koniec przedzialu z ktorego maja byc losowane liczby: "; cin>>kp; cout<<"losuje liczby z przedzialu ["<<pp<<","<<kp<<"]"<<endl;

Losuj(liczby,n,pp,kp); Wypisz(liczby,n); cout<<"znalezienie elementu minimalnego - m"<<endl; cout<<"sprawdzenie czy tablica zawiera powtorzenia - p"<<endl; cout<<"koniec programu - inny klawisz"<<endl; cin>>znak; if(znak=='m') cout<<"element minimalny tablicy to" <<Minimalny(liczby,n)<<endl; else if(znak=='p') if(powtorzenia(liczby,n)) cout<<"tablica zawiera powtorzenia"<<endl; else cout<<"tablica nie zawiera powtorzen"<<endl; system("pause"); void Losuj(int tab[],int r,int a,int b) int temp,przedzial; przedzial=b-a; srand(time(null)); for (int i=0; i<r; i++) temp=rand(); tab[i]=temp%przedzial+a; void Wypisz(int tab[],int r)

cout<<"elementy tablicy:"<<endl; for(int i=0;i<r;i++) cout<<"element "<<i+1<<": "<<tab[i]<<endl; int Minimalny(int tab[],int r) int min=tab[0]; for(int i=1;i<r;i++) if(min>tab[i]) min=tab[i]; return min; bool Powtorzenia(int tab[],int r) bool powt=false; int temp; for(int i=0;i<r-1;i++) for(int j=0;j<r-1;j++) if(tab[j]<tab[j+1]) temp=tab[j]; tab[j]=tab[j+1]; tab[j+1]=temp; for(int j=0;j<4;j++) if(tab[j]==tab[j+1]) powt=true; return powt;

Omówienie programu Na początku programu mamy następujące deklaracje funkcji (powtórzenie o funkcjach patrz opis Programu 6): void Losuj(int t[],int r,int a,int b); void Wypisz(int tab[],int n); int Minimalny(int tab[],int n); bool Powtorzenia(int tab[],int r); Definicje powyŝszych znajdują się poniŝej funkcji main. Funkcja Losuj void Losuj(int tab[],int r,int a,int b) int temp,przedzial; przedzial=b-a; srand(time(null)); for (int i=0; i<r; i++) temp=rand(); tab[i]=temp%przedzial+a; Funkcja nie zwraca Ŝadnej wartości zatem przed nazwą mamy słówko void (i dlatego wewnątrz funkcji nie ma instrukcji return). Funkcja posiada 4 argumenty/parametry: int tab[],int r,int a,int b Pierwszy argument to tablica typu int: int tab[] Drugi argument to zmienna typu int: int r (argument ten określa rozmiar tablicy tab) Trzeci argument to zmienna typu int: int a (argument ten określa początek przedziału z którego będziemy losowali liczby) Czwarty argument to zmienna typu int: int b (argument ten określa koniec przedziału z którego będziemy losowali liczby) Wewnątrz funkcji mamy: int temp,przedzial; przedzial=b-a; srand(time(null)); for (int i=0; i<r; i++)

temp=rand(); tab[i]=temp%przedzial+a; Pierwsza linijka: int temp,przedzial; to deklaracja dwóch zmiennych typu int o nazwach temp i przedzial. Następnie zmiennej przedział przyporządkowujemy róŝnicę b-a: przedzial=b-a; Wartość zmiennej (lokalnej) a to początek przedziału z którego będą losowane liczby, wartość zmiennej (lokalnej) b to koniec przedziału z którego będą losowane liczby. A zatem wartość zmiennej przedział to długość przedziału z którego będą losowane liczby (np. jeŝeli mamy przedział [4,9] to jego długość wynosi 5). O generowaniu liczb losowych moŝna przeczytać na stronie: http://math.uni.lodz.pl/~polrola/strony/0607l-podyplom/losowanie_liczb.html (O generowaniu liczb losowych patrz teŝ Program 5) po zapoznaniu się z powyŝszą stroną wiemy, Ŝe aby wygenerować liczbę z przedziału [0,k] powinniśmy wziąć resztę z dzielenia temp (temp=rand()) przez k czyli temp%k W naszym przypadku chcemy wygenerować liczby z przedziału [a,b]. Aby otrzymać taką liczbę wystarczy wylosować liczbę z przedziału [0,b-a] i do wyniku dodać liczbę a (jeŝeli np. losujemy liczbę z przedziału [0,4] i do wyniku dodamy 6 to w efekcie otrzymamy liczbę z przedziału [6,10]). A zatem bierzemy resztę z dzielenia temp przez b-a: temp%przedzial bo wartość zmiennej przedział to b-a. Następnie do otrzymanej wartości dodajemy a czyli mamy: temp%przedzial+a; Zapisanie w i-tym elemencie tablicy tab liczby losowej z przedziału [a,b]:

tab[i]=temp%przedzial+a; Instrukcje: temp=rand(); tab[i]=temp%przedzial+a; znajdują się w pętli: for (int i=0; i<r; i++) poniewaŝ chcemy wpisać liczby losowe do całej tablicy tab (o rozmiarze r). A zatem generowanie liczby losowej odbywa się dla kaŝdego elementu tablicy oddzielnie. Funkcja Wypisz Funkcja ta została omówiona w Programie 11. Funkcja Minimalny int Minimalny(int tab[],int r) int min=tab[0]; for(int i=1;i<r;i++) if(min>tab[i]) min=tab[i]; return min; Funkcja zwraca wartości typu int zatem przed jej nazwą mamy słówko int (i dlatego wewnątrz funkcji mamy instrukcję return). Funkcja posiada 2 argumenty/parametry: int tab[],int r Pierwszy argument to tablica typu int: int tab[] Drugi argument to zmienna typu int: int r (argument drugi określa rozmiar tablicy tab) Wewnątrz funkcji mamy:

int min=tab[0]; for(int i=1;i<r;i++) if(min>tab[i]) min=tab[i]; return min; Instrukcje: int min=tab[0]; for(int i=1;i<r;i++) if(min>tab[i]) min=tab[i]; to wyszukanie element minimalnego w tablicy tab i zapisanie go w zmiennej min. Sposób wyszukania elementu minimalnego jest analogiczny do wyszukania elementu maksymalnego, który jest omówiony w Programie 13 (podstawowa róŝnica to znak > zamiast <). Ostania linijka funkcji Minimalny to: return min; Instrukcja ta powoduje, Ŝe funkcja zwraca wartość zmiennej min (czyli najmniejszy element tablicy tab). Co to znaczy, Ŝe funkcja zwraca wartość? - powtórzenie JeŜeli funkcja zwraca wartość wówczas przed jej nazwą musimy umieścić typ wartości zwracanej. JeŜeli funkcja nie zwraca wartości wówczas przed jej nazwą pojawia się słowo void. Funkcje, która nie zwraca wartości nazywamy procedurą. RozwaŜmy funkcję: void fun() cout<< sroda ; PoniewaŜ, przed nazwą funkcji (fun) mamy słówko void zatem funkcja ta nie zwraca wartości. Jej działanie polega na wypisaniu na ekranie słowa sroda. A zatem po wywołaniu: fun();

na ekranie będzie wypisane słowo sroda. RozwaŜmy teraz inną funkcję: int fun2() int a=5; return a; PoniewaŜ, przed nazwą funkcji (fun2) mamy słówko int zatem funkcja ta zwraca wartość całkowitą. Jej działanie polega na: Zdefiniowaniu zmiennej a i nadaniu jej wartości 5: int a=5; Zwróceniu wartości zmiennej a: return a; Co oznacza to zwracanie wartości? Aby to wyjaśnić spróbujmy wywołać funkcję fun2: fun2(); Na ekranie nic się nie pojawi dlatego, Ŝe po wywołaniu funkcji wykonywane są instrukcje wewnątrz funkcji, a wewnątrz tej funkcji nie ma instrukcji zaczynającej się od: cout<< która to instrukcja słuŝy do wypisywania na ekran. Wywołajmy teraz funkcję fun2 inaczej: cout<<fun2(); Na ekranie będzie coś wypisane (mamy cout<<). Co to będzie? Okazuje się, Ŝe będzie to wartość zwracana przez funkcję fun2! Wartość zwracana przez funkcję fun2 to wartość zmiennej która pojawia się po słowie return czyli wartość zmiennej a (poniewaŝ mamy return a), która ma wartość 5. I to właśnie wartość tej zmiennej będzie wypisana na ekranie. Czyli na ekranie pojawi się liczba 5. UWAGA: jeŝeli funkcja zwraca wartość wówczas musi się w jej definicji pojawić instrukcja return po której następuje nazwa zmiennej, której wartość jest zwracana przez funkcję np.

return x; lub wprost wartość zwracana przez funkcję np. return 5; RozwaŜmy teraz funkcję: void fun3() int a=5; PoniewaŜ funkcja ta nie zwraca wartości zatem nie ma sensu instrukcja: cout<<fun3(); RozwaŜmy jeszcze funkcję: int fun4() return 7; Funkcja zwraca wartość całkowita (int przed nazwą funkcji). Jaka to jest wartość? Wiemy juŝ, Ŝe jest to zmienna lub liczba występująca po return. W powyŝszej funkcji mamy: return 7; czyli funkcja zwróci wartość 7. Czyli jeŝeli wywołamy funkcję fun4 następująco: cout<<fun4(); na ekranie zostanie wypisana liczba 7. A co się stanie jeŝeli funkcję ta wywołamy następująco: fun4(); Teraz na ekranie nie będzie nic wypisane. Mimo, Ŝe funkcja zwraca wartość 7 to jednak nic nie robimy z tą wartością, w szczególności nie wypisujemy jej na ekranie (instrukcją cout<<).

Funkcja Powtorzenia bool Powtorzenia(int tab[],int r) bool powt=false; int temp; for(int i=0;i<r-1;i++) for(int j=0;j<r-1;j++) if(tab[j]<tab[j+1]) temp=tab[j]; tab[j]=tab[j+1]; tab[j+1]=temp; for(int j=0;j<4;j++) if(tab[j]==tab[j+1]) powt=true; return powt; Funkcja zwraca wartość typu bool (typ logiczny patrz omówienie Programu 3) zatem przed jej nazwą mamy słówko bool (i dlatego wewnątrz funkcji mamy instrukcję return). Funkcja posiada 4 argumenty/parametry: int tab[],int r Pierwszy argument to tablica typu int: int tab[] Drugi argument to zmienna typu int: int r (argument drugi określa rozmiar tablicy tab) Działanie funkcji sprowadza się do sprawdzenia czy w tablicy przesłanej do niej jako argument (tab) o rozmiarze r występuję powtórzenie jakiegoś elementu. Sprawdzenie czy powtórzenie występuje odbywa się analogicznie jak w Programie 13 tzn. sortujemy tablicę a następnie sprawdzamy czy w tablicy występują obok siebie dwa identyczne elementy (szczegóły metody patrz Program 13).

Omówienie zawartości funkcji main() Deklaracje zmiennych wykorzystanych w programie: int n; char znak; int pp,kp; Następnie wprowadzamy rozmiar tablicy i definiujemy tablice: cout<<"podaj rozmiar tablicy: "; cin>>n; int liczby[n]; Następnie wprowadzamy początek i koniec przedziału z którego maja być losowane liczby: cout<<"podaj poczatek przedzialu z ktorego maja byc losowane liczby: "; cin>>pp; cout<<"podaj koniec przedzialu z ktorego maja byc losowane liczby: "; cin>>kp; cout<<"losuje liczby z przedzialu ["<<pp<<","<<kp<<"]"<<endl; Tablicę liczby przesyłamy do funkcji Losuj. W efekcie tablica ta zostanie wypełniona liczbami losowymi. Wywołanie funkcji Losuj: Losuj(liczby,n,pp,kp); Zawartość tablicy liczby zostanie wypisana na ekranie: Wypisz(liczby,n); Następnie na ekranie pojawia się komunikat: Znalezienie elementu minimalnego - m Sprawdzenie czy tablica zawiera powtorzenia - p Koniec programu - inny klawisz Litera, którą wciśniemy zapisywana jest w zmiennej znak (typu char):

cin>>znak; W zaleŝności od tego jaką literę wybierzemy wykonywane są odpowiednie instrukcje: if(znak=='m') cout<<"element minimalny tablicy to" <<Minimalny(liczby,n)<<endl; else if(znak=='p') if(powtorzenia(liczby,n)) cout<<"tablica zawiera powtorzenia"<<endl; else cout<<"tablica nie zawiera powtorzen"<<endl; Instrukcja warunkowa: if(powtorzenia(liczby,n)) cout<<"tablica zawiera powtorzenia"<<endl; else cout<<"tablica nie zawiera powtorzen"<<endl; Warunek to: Powtorzenia(liczby,n) Warunek ten jest spełniony jeŝeli wartość zwracana przez funkcję Powtorzenia to true (prawda). Oznacza to (patrz omówienie funkcji Powtorzenia), ze tablica liczby zawiera powtórzenia.