Programowanie w C Wartości pseudolosowe i pomiar czasu

Podobne dokumenty
Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

3 Przygotował: mgr inż. Maciej Lasota

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05Z

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język C zajęcia nr 11. Funkcje

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

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

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

Wstęp do programowania

INSTRUKCJE REPETYCYJNE PĘTLE

Laboratorium 5: Tablice. Wyszukiwanie binarne

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Wykład 3. Instrukcje powtarzające

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Na tych zaj ciach poznamy tablice liczb, zarówno jedno jak i wielowymiarowe.

Funkcja (podprogram) void

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

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

Spis treści JĘZYK C - TABLICE JEDNOWYMIAROWE, ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Co nie powinno być umieszczane w plikach nagłówkowych:

tablica: dane_liczbowe

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

2 Przygotował: mgr inż. Maciej Lasota

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Tablice jednowymiarowe

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

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Spis treści JĘZYK C - TABLICE DWUWYMIAROWE, OPERACJE NA TABLICACH. Metodyki i techniki programowania

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Zmienne i struktury dynamiczne

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

EGZAMIN MATURALNY 2011 INFORMATYKA

Spis treści JĘZYK C - TABLICE DWU- I WIELOWYMIAROWE, OPERACJE NA TABLICACH. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

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

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie obiektowe W3

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Modelowanie komputerowe

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

lekcja 8a Gry komputerowe MasterMind

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Wstęp do Informatyki

. Podstawy Programowania 1. Typy wyliczeniowe i jednowymiarowe tablice. Arkadiusz Chrobot. 29 listopada 2016

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

Pola i metody statyczne

Programowanie Proceduralne

Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

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

Programowanie Proceduralne

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Podstawy programowania w języku C++

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Sieci Mobilne i Bezprzewodowe laboratorium 2 Modelowanie zdarzeń dyskretnych

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Generowanie ciągów pseudolosowych o zadanych rozkładach przykładowy raport

1 Podstawy c++ w pigułce.

Wstęp do wskaźników w języku ANSI C

Język C++ zajęcia nr 2

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

Programowanie strukturalne i obiektowe

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Wykład 1

INSTRUKCJE REPETYCYJNE PĘTLE

1 Podstawy c++ w pigułce.

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Struktury Struktura polami struct struct struct struct

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

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Wskaźniki w C. Anna Gogolińska

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

Wykład 3 Składnia języka C# (cz. 2)

Transkrypt:

Programowanie w C Wartości pseudolosowe i pomiar czasu Artur Opaliński (pokój E112) e-mail: (p. wykład administracyjny) URL: (p. wykład administracyjny)

Treść wykładu Generowanie wartości losowych Wartości pseudolosowe i losowe w komputerze Pomiar czasu 2

Support for Yoda Master Slajdy nie były przygotowane z myślą o samodzielnej nauce. Przyjdź na wykład, żeby je lepiej zrozumieć! Zdobądź punkty bonusowe: Korzystając z informacji z wykładu, Internetu, własnych doświadczeń, itp. - opisz myśli z tej prezentacji dokładniej i złóż na Wiki! Zaznacz, które numery slajdów omawiasz 3

Wartości pseudolosowe Niekiedy potrzeba wytworzyć przypadkowe dane Kierunek ruchu przeciwnika na ekranie Prawdopodobieństwo zdarzenie, np. że pojawi się bomba W pliku nagłówowym stdlib.h zadeklarowana jest funkcja rand() o prototypie: int rand(void); Funkcja zwraca wartości int od 0 do RAND_MAX RAND_MAX to stała zdefiniowana w stdlib.h (w Windows ma wartość 32767) Przykładowe wywołanie: #include<stdlib.h> int p; p=rand(); /* p uzyska wartość pseudolosową od 0 do RAND_MAX. Jak uzyskać wartość z mniejszego zakresu? */ 4

Wartości pseudolosowe Korekta zakresu Często potrzebna jest wartość losowa z pewnego zakresu, np. 0...100, albo -10...+10 Wymaga zmiany przedziału (0,RAND_MAX) na (a,b) Długości przedziału z RAND_MAX na b-a Początku przedziału z 0 na a 0 RAND_MAX a b 5

Wartości pseudolosowe Korekta zakresu (c.d.) Metoda błędna ograniczenia zakresu p=rand() % 11 ; //np. liczby od 0 do +10: p=rand() % RANGE; // liczby od 0 do (RANGE-1) Nie nadaje się do (RANGE-1)>RAND_MAX (=rozszerzenia zakresu) Jeżeli RANGE nie mieści się całkowitą ilość razy w RAND_MAX+1, to częściej pojawią się liczby z przedziału [0, (RAND_MAX % RANGE)) niż z przedziału [(RAND_MAX % RANGE), RANGE) Pomija wpływ starszych bitów zwracanych przez rand(). Z kolei same młodsze bity w typowych generatorach pseudolosowych wykazują wyraźną powtarzalność 0 RAND_MAX 0 RANGE 6

Wartości pseudolosowe Korekta zakresu (c.d.) Metoda lepsza: p=10 + rand() / (float(rand_max)+1)* 20; //liczby [- 10;+10) p=a + rand() / (float(rand_max)+1)* (b-a); //liczby [a;b) Pozostaje problem, gdy (b-a) jest bliskie RAND_MAX i gdy (b-a) nie mieści się całkowitą ilość razy w RAND_MAX+1 0 RAND_MAX a b 7

DEMO: Generowanie wartości pseudo- losowych (w2.c) #include <stdio.h> #include <conio.h> #include <stdlib.h> // definiuje funkcję rand() i stałą RAND_MAX #define N 5000 int main() { int tab[n]={0}; // dla jasności demonstracji na pocz. same zera int i; for(i=n-1; i>=0; i--) { // inicjalizacja moze być tez od końca tab[i]=rand(); // funkcja rand() zwraca liczbę pseudolosowa printf("wartosc na pozycji %u to: %d\n", i, tab[i]); } printf("\nczy powyzej sa wartosci losowe? :-)\n"); getch(); } 8

Pseudolosowość a losowość Komputer działa deterministycznie, i wymaga źródeł losowości (entropii) do generacji liczb losowych Dobre źródła entropii Rozpad atomów Zjawiska pogodowe (http://random.org) Przeciętne źródła entropii Ruch sieciowy Aktywność użytkownika Czas działania, czas zegarowy Temperatura komponentów Słabe źródła entropii Generator liczb pseudolosowych w PC (funkcja rand()) Przewidywalny, z użyciem matematycznej formuły: x k =f(x k-1 ) Powstaje problem wartości x 0 (tzw. zarodek, ang. seed) 9

Zasiewanie generatora liczb pseudolosowych W pliku nagłówowym stdlib.h zadeklarowana jest funkcja srand() o prototypie: void srand(unsigned int);...która ustala wartość początkowa generatora (seed) słowo void przed srand() oznacza, że funkcja nie zwraca żadnej wartości Przykładowe wywołanie to #include <stdlib.h> unsinged int ziarno; ziarno=(...) // wyznaczyć możliwie losową wartość ziarna srand(ziarno); Jako wartość ziarna można wziąć bieżący czas, czas czekania na wciśnięcie klawisza przez użytkownika, itp 10

Bieżący czas Do pomiaru czasu służy funkcja time() zdefiniowana w pliku nagłówkowym time.h Typowe wywołanie: long int czas; czas=time(null); Zwraca ilość sekund, jaka upłynęła od początku ery komputerowej Era komputerowa zaczeła się 1.01.1970 1 rok to ponad 30mln sekund Stąd przewiduje się zwracanie wartości większych niż UINT_MAX Prototyp: time_t time(time_t* timer); Typ time_t jest zdefiniowany (typedef) zazwyczaj jako dłuższy niż 11int

Pomiar upływu czasu (DEMO) #include <stdio.h> #include <time.h> //definiuje funkcję time() main(){ long int czas1, czas2; czas1=time(null); // ile sekund od 1.01.1970? printf("wcisnij ENTER..."); getchar(); czas2=time(null); // ile sekund od 1.01.1970? } printf("minelo %ld[s]\n", czas2-czas1); getchar(); 12

DEMO: Generowanie wartości pseudo- losowych, lepsza losowość (w3.c) #include <stdio.h> #include <conio.h> #include <stdlib.h> // definiuje funkcje rand(), srand() #include <time.h> // definiuje funkcję time() #define N 5000 int main() { int tab[n]={0}; int i; // dla jasności na początek same zera 13

DEMO: Inicjalizacja wartościami pseudo- losowymi, lepsza losowość (c.d.) srand(time(null)); // zasianie ilością sekund od 1.01.1970 for(i=n-1; i>=0; i--) { // inicjalizacja może być tez od końca tab[i]=rand()/(rand_max/100 +1); /* funkcja rand() zwraca liczbe pseudolosowa. Sprowadzam do zakresu [0;100) */ printf("wartosc na pozycji %u to: %d\n", i, tab[i]); } printf("\nczy powyzej sa wartosci losowe? \n"); getch(); } 14

Co powinienem umieć? Deklarować tablice jednowymiarowe Odwoływać się do elementów tablicy w typowych zastosowaniach Odróżniać indeks tablicy, od wartości znajdującej się pod tym indeksem tablicy Rozumieć problem uzyskiwania losowych wartości w komputerze Deklarować i wykorzystywać stałe 15