UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY w Bydgoszczy ZAKŁAD ELEKTROENERGETYKI LABORATORIUM INFORMATYKI



Podobne dokumenty
1 Podstawy c++ w pigułce.

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

1 Podstawy c++ w pigułce.

( wykł. dr Marek Piasecki )

2 Przygotował: mgr inż. Maciej Lasota

Programowanie strukturalne i obiektowe

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

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

Podstawy programowania - 1

Część 4 życie programu

Podstawy programowania w języku C

Programowanie w języku Python. Grażyna Koba

Podstawy Programowania C++

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

Podstawy programowania (1)

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Podstawy programowania C. dr. Krystyna Łapin

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

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

do instrukcja while (wyrażenie);

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Algorytm. a programowanie -

Język ludzki kod maszynowy

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

Programowanie - wykład 4

Programowanie w języku C++ Grażyna Koba

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Struktura pliku projektu Console Application

Programowanie w języku C++

Język C zajęcia nr 11. Funkcje

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

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

Zmienne, stałe i operatory

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

I - Microsoft Visual Studio C++

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy programowania w języku C i C++

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

tablica: dane_liczbowe

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

KURS C/C++ WYKŁAD 1. Pierwszy program

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Proste programy w C++ zadania

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wstęp do programowania. Wykład 1

Pętla for. Wynik działania programu:

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Ćwiczenie 1. Wprowadzenie do programu Octave

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

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

Warsztaty dla nauczycieli

Programowanie komputerowe. Zajęcia 1

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

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Podstawy i języki programowania

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Wstęp do programowania

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

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

Podstawy Programowania. Wykład 1

Instrukcje sterujące

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Cw.12 JAVAScript w dokumentach HTML

3. Instrukcje warunkowe

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); }

Odczyt danych z klawiatury Operatory w Javie

Laboratorium nr 1. i 2.

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

Programowanie strukturalne i obiektowe. Funkcje

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

4. Funkcje. Przykłady

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

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

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

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

Ćwiczenie 1. Wprowadzenie do programu Octave

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Programowanie - instrukcje sterujące

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

7. Pętle for. Przykłady

I. Podstawy języka C powtórka

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

WHILE (wyrażenie) instrukcja;

Transkrypt:

UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY w Bydgoszczy ZAKŁAD ELEKTROENERGETYKI LABORATORIUM INFORMATYKI INSTRUKCJA DO ĆWICZENIA I Algorytmizacja zadań, struktura programu Opracował: dr inż. Marcin Drechny Luty 2012 r.

2 1. Celem ćwiczenia jest: nauka umiejętności algorytmizacji zadań i tworzenia algorytmów, zapoznanie się z działaniem kompilatora i edytora C++, poznanie elementów (bloków) programu oraz jego konstrukcji w C++. 2. Wprowadzenie 2.1. Algorytm i algorytmizacja problemu Aby poprawnie napisać program oraz zaoszczędzić czas podczas jego tworzenia należy sporządzić algorytm programu. Jest on metodą rozwiązania danego problemu i jego pewnym uogólnieniem. Sporządzony algorytm ułatwia pisanie i testowanie programu. Tworząc algorytm musimy brać pod uwagę specyficzne własności mikrokomputera (procesora) dla którego przygotowujemy program. Postać sieci działań zależy od programisty, a także od języka programowania i rozkazów, które są dostępne w tym języku. Konstruując algorytm musimy wiedzieć z czego on się składa. W jego skład wchodzą 4 główne bloki oraz strzałki kierunku działań programu. Blokami tymi są: - początek i koniec procedury: START STOP - wprowadzanie i wyprowadzanie danych: - operacje na danych: - porównywanie danych i podejmowanie decyzji: - kierunek wykonywania programu: Aby stworzyć algorytm należy: zdefiniować problem, zdecydować jakie dane będą potrzebne dla programu, zdecydować jakie informacje wyjściowe wytworzyć ma program oraz podzielić problem na mniejsze, logiczne etapy prowadzące do jego rozwiązania. Przykład algorytmu zadanego problemu przedstawiono poniżej.

3 Przykład: Oblicz sumę kolejnych liczb naturalnych, z których pierwszą jest liczba P, a ostatnią N. Liczby P i N mogą być wybrane losowo. Przyjmijmy P=2 i N=5. START Pętla programowa Wczytanie danych P=2, N=5 SUMA=0 LICZBA=P SUMA=SUMA+LICZBA LICZBA = LICZBA + 1 NIE LICZBA >= N TAK Wyprowadzanie danych SUMA STOP Na początku wczytujemy dane P, N oraz przypisujemy zmiennej SUMA wartość 0 a zmiennej LICZBA wartość P czyli 2. Następnie dodajemy do SUMY wartość zmiennej LICZBA. Sprawdzamy czy zmienna LICZBA jest mniejsza od wartości maksymalnej N. Jeśli tak to wyprowadzamy zmienną SUMA na ekran monitora. Jeśli nie to do zmiennej LICZBA dodajemy wartość 1 i powtarzamy czynność od początku. Powtarzanie wielokrotne tej samej czynności jest zwane pętlą programową. W ten sposób zadany problem został rozwiązany. 2.2. Program i języki programowania Dobrze zaprogramowany komputer może wykonywać obliczenia bardzo szybko. Zastosowanie komputera przynosi korzyści wtedy, gdy konieczne jest wielokrotne wykonywanie tych samych obliczeń lub przekształceń dla różnych danych. Zapis sposobu i kolejności wykonywania tych działań nazywamy programem, a jego oddzielne kroki rozkazami albo instrukcjami. Aby napisać poprawnie trzeba schematycznie określić kroki prowadzące do rozwiązania danego problemu. W tym celu stosujemy sieci działań (inna nazwa to: schemat blokowy programu lub algorytm).

4 Programy piszemy w językach programowania. Języki programowania możemy podzielić na kilka sposobów. Jednym z podziałów jest podział na języki zorientowane maszynowo, problemowo oraz obiektowo. Języki zorientowane maszynowo: - języki asemblerowe, Języki zorientowane problemowo: - BASIC, FORTRAN, COBOL, PASCAL, C/C++, Języki zorientowane obiektowo: - Visual C++, Visual BASIC, Builder C++, Delphi. Instrukcje języka zorientowanego maszynowo stanowią odzwierciedlenie rozkazów danego komputera. Niedogodność związana z programowaniem w języku zorientowanym maszynowo polega na tym, że programista musi znać dokładnie organizację mikrokomputera, dla którego przygotowuje program. Zaletą jest to, że programy zajmują mniej pamięci. Programista posługujący się językiem zorientowany problemowo nie musi dokładnie znać organizacji komputera, dla którego jest przeznaczony jest program, ale za to powinien znać i umiejętnie wykorzystywać możliwości tego języka. Przy programowaniu w takim języku postać programu określa rozwiązywany problem. Języki zorientowane obiektowo są to języki zorientowane problemowo z rozbudowaną biblioteką obiektów. Obiekty są osobnymi modułami (programami) z których można korzystać. Za pomocą zdarzeń na tych obiektach a także zmieniając własności tych obiektów tworzymy program. 2.3. Kompilator Pierwszym zadaniem kompilatora sprawdzenie pliku źródłowego na obecność instrukcji programu w określonym języki programowania. Jeśli są one zgodne ze wszystkimi regułami języka programowania np. C++, to kompilator dokona ich (instrukcji) konwersji na język maszynowy (zera i jedynki), którego polecenia komputer umie wykonać. Innymi słowy kompilator przekształca instrukcje programu (kod źródłowy) na język maszynowy (kod maszynowy). Kompilator umieszcza program w języku maszynowym w pliku wykonywalnym, o rozszerzeniu EXE. W języku C++ powstawanie kodu maszynowego (pliku wykonywalnego) jest realizowane w dwóch etapach:

5 w pierwszym etapie następuje kompilacja modułów źródłowych, czyli przetłumaczenie instrukcji języka C/C++ na język wewnętrzny komputera. Wynikiem tej operacji na plikach źródłowych (*.c, *.cpp) jest powstanie zbiorów (plików) o tej samej nazwie i rozszerzeniu *.obj, w drugim etapie, który nazywany jest łączeniem, połączone zostają w jedną całość wykonywalną moduły programu. W tym celu korzystamy z narzędzia zwanego konsolidatorem lub z ang. linkerem..c.inc.cpp Kompilator Asembler.ASM.OBJ.OBJ Konsolidator.EXE Od kodu źródłowego do wynikowego (programu). 2.4. Struktura organizacyjna programu Przykład prostego programu: //Program obliczający pole i obwód koła #include <vcl.h> #include <iostream.h> #include <math.h> #include <conio.h>

6 void main(void) long Pole; long Obwod; long Promien = 3; cout << "Pole kola wynosi: " << M_PI * pow(promien,2) << endl; cout << "Obwod kola wynosi: " << 2 * M_PI * Promien; getch(); Program oblicza pole oraz obwód koła o promieniu równym 3. Jest to przykład pliku źródłowego (kodu źródłowego). W przykładzie wyróżniamy: //Program obliczający pole i obwód koła - komentarz Wiersz programu lub jego część może pełnić rolę komentarza. W takiej sytuacji wszystkie znaki znajdujące się za // traktujemy jako komentarz (w danej linii). Istnieje także możliwość potraktowania jako komentarz kilku wierszy. W tej sytuacji komentarz rozpoczynamy od znaków /* a kończyny znakiem */ np. /* To jest komentarz */ #include <iostream.h> - dołączenie do programu pliku nagłówkowego iostream.h #include <math.h> - dołączenie pliku nagłówkowego math.h Pliki z rozszerzeniem.h, włączane na początku (w nagłówku) programu, noszą nazwę plików nagłówkowych. Pliki nagłówkowe zawierają definicje potrzebne kompilatorowi do wykonania różnych operacji; poleceń użytych w pliku źródłowym np. math.h - dołącza definicje operacji matematycznych i umożliwia ich wykorzystanie. void main(void) - miejsce początkowe programu Program w języku C++ składa się z co najmniej jednej funkcji. Funkcja która występuje zawsze to funkcja main. Ma ona także inne znaczenie. Jest to jedyna instrukcja, która wykonywana jest na samym początku programu. Void oznacza że funkcja jest bezparametrowa, to znaczy nie przyjmuje żadnych wartości, jak i nie zwraca żadnej wartości. Przy pisaniu programów bardziej złożonych, dzielimy je na mniejsze części łatwiejsze do

7 opanowania zwane funkcjami. Wtedy instrukcja void main(void) będzie określać grupę głównych instrukcji., - znaki przestankowe W języku C++ istnieją następujące znaki przestankowe: [ ] ( ), ; :... * = # [ ] - nawiasy kwadratowe są używane do definiowania tablic jedno i wielowymiarowych, ( ) - nawiasy okrągłe służą m. In. do grupowania wyrażeń, wskazywania wywołań funkcji i listy parametrów, - nawiasy klamrowe wskazują na instrukcję złożoną, grupują działania. W przykładzie są początkiem i końcem instrukcji main., - przecinek służy m. In. do oddzielania argumentów wywołania funkcji, ; - średnik oznacza zakończenie instrukcji, long Pole; - deklaracja zmiennej Pole typu long, long Obwod; - deklaracja zmiennej Obwod typu long, long Promien = 3; - deklaracja zmiennej Promien typu long wraz z przypisaniem wartości. Deklarowanie zmiennych wiąże się z nadawaniem nazw (identyfikatorów) zmiennym. Identyfikatory w języku C/C++ mogą składać się z liter małych i wielkich, cyfr oraz znaku podkreślenia czyli: a b c d e f g h i j k l m n o p r s t u v w x y z A B C D E F G H I J K L N M O P R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _. Prawidłowo zdefiniowany identyfikator musi spełniać dwa warunki: pierwszy znak musi być literą lub znakiem podkreślenia, standardowo brane są pod uwagę pierwsze 32 znaki identyfikatora, pozostałe nie są uwzględniane. Przykłady: zmienna1, Pole, Obwod, wynik itd. long, main, void - słowa kluczowe, Z identyfikatorami wiąże się jeszcze jedno zagadnienie: słowa kluczowe. Słowa kluczowe są specjalnymi identyfikatorami zarezerwowanymi dla ściśle określonych celów i mogą być wykorzystane tylko zgodnie z ich przeznaczeniem ustalonym przez definicję języka C++. Kilka przykładów słów kluczowych przedstawionych zostało poniżej:

8 char, class, float, if, int, short, signed, do, long, void, while cout << "Pole koła wynosi: " << M_PI * sqrt(promien) << endl; - instrukcje programu, cout << "Obwód koła wynosi: " << 2 * M_PI * Promien; - instrukcje programu. Przykładowe instrukcje programu wyświetlające na ekranie monitora obliczony obwód i pole koła. Powyższe instrukcje mogły zostać użyte jedynie po dołączeniu odpowiednich plików nagłówkowych. Biblioteki standardowe Ponieważ język C++ nie posiada instrukcji realizujących np. funkcje matematyczne, operacje na łańcuchach znaków, operacje na plikach, operacje wejścia - wyjścia itp. dlatego należy korzystać z funkcji bibliotek standardowych. Biblioteki standardowe stanowią integralną część wszystkich profesjonalnych pakietów języka C++. Wykorzystanie zdefiniowanych w nich stałych, typów, klas i funkcji znacznie skraca czas i upraszcza tworzenie oprogramowania. Typowe biblioteki standardowe to: funkcje matematyczne - math.h, complex.h, bcd.h, operacje na liczbach, łańcuchach i znakach - ctype.h, stdlib.h, string.h, operacje wejścia - wyjścia - stdio.h, iostream.h, fstream.h, grafika tekstowa - conio.h,- grafika punktowa - graphics.h.

9 3. Przebieg ćwiczenia zadania do wykonania 3.1. Napisać algorytm obliczania silni z podanej liczby. 3.2. Napisać algorytm obliczania wartości średniej z kilku liczb. a) Ilość wprowadzanych z klawiatury liczb jest ustalona z góry. b) Liczba danych wprowadzanych z klawiatury do programu jest wpisywana jako pierwsza dana do programu. c) Nie jest znana liczba wprowadzanych z klawiatury danych do programu. Wprowadzanie trwa tak długo aż wybierzemy opcję obliczania średniej z liczb już wprowadzonych. 3.3. Napisać algorytm rozwiązywania równania kwadratowego postaci: ax 2 +bx+c=0. 3.4. Napisać algorytm wyznaczania wartości minimalnej z kilkunastu liczb. 3.5. Napisać algorytm wyznaczania wartości maksymalnej z kilkunastu liczb. 3.6. Napisać algorytm obliczania iloczynu podawanych przez użytkownika liczb, aż do momentu, kiedy ten iloczyn przekroczy wartość 1000. 3.7. Opracować algorytm wyznaczania minimalnej wartości wskaźnika sumowania k, przy której funkcja a(k) > 1,3. Wynik k oraz sumę a(k) - wyświetlić na ekranie monitora. a( k) k = i= 0 exp( 3 i) > 1,3 3.8. Napisać algorytm sprawdzania czy podana liczba jest liczbą pierwszą. 3.9. Napisać algorytm wyszukiwania liczb pierwszych z podanego zakresu 0-X (X poda prowadzący). n n! 3.10. Napisać algorytm wyznaczania dwumianu Newtona: =. k k!( n k)!

3.11. Zapoznanie się z opcjami edytora i kompilatora Borland C++ Builder 6.0. 10

UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY w Bydgoszczy ZAKŁAD ELEKTROENERGETYKI LABORATORIUM INFORMATYKI INSTRUKCJA DO ĆWICZENIA II Zmienne, wprowadzanie danych do programu i wyprowadzanie na ekran Instrukcje warunkowe Opracował: dr inż. Marcin Drechny Luty 2012r.

2 1. Cel ćwiczenia Celem ćwiczenia jest nabycie umiejętności: sposobu deklarowania i stosowania zmiennych, wyprowadzania i wprowadzania danych do i z programu, korzystania z instrukcji warunkowych. 2. Wprowadzenie 2.1. Zmienne Tworząc programy złożone, zmuszeni jesteśmy przechowywać różne wartości (liczbowe lub tekstowe). Programy przechowują te dane w konkretnych miejscach pamięci komputera. Aby korzystać z tych danych należy używać zmiennych. Zmienna jest nazwą miejsca w pamięci, które może przechowywać konkretną wartość. Każda zmienna ma swój typ i swoją nazwę, np. Long Pole; Long Obwod; gdzie, typ zmiennych to long a ich nazwa to Pole oraz Obwod, Typ zmiennej określa typ wartości jakie może ona przechowywać (liczba całkowita, rzeczywista, ciąg znaków), Do przypisywania zmiennym wartości służy operator przypisania, czyli znak równości np. Promien = 3; Deklarując nazwy zmiennych (ich identyfikatory), należy pamiętać o regułach nadawania nazw (identyfikatorów) czyli m. in. nie używania słów kluczowych. A nazwy zmiennych należy nadawać tak aby program był bardziej zrozumiały i czytelny. Słowa kluczowe określające typy zmiennych całkowitych: char - typ znakowy, int - typ całkowity, long - typ długich liczb całkowitych, signed - liczby ze znakiem, short - typ krótkich liczb całkowitych, unsigned - liczby bez znaku. Słów kluczowych wymienionych wcześniej używa się zwykle w połączeniu np. signed char, unsigned short int, signed long int.

3 Obecność niektórych słów jest przyjmowana domyślnie np. int - oznacza liczbę całkowitą ze znakiem czyli signed short int, unsigned long jest równoważne unsigned long int. Dlatego często deklarujemy zmienne w skrócie określając typ zmiennych: int, long, char, unsigned long, unsigned int. Słowa kluczowe określające typy zmiennych rzeczywistych: float - liczby rzeczywiste pojedynczej precyzji, double - liczby rzeczywiste podwójnej precyzji, long double - liczby rzeczywiste wysokiej precyzji. Zakresy zmiennych: Typ zmiennej Rozmiar w bitach Min Max unsigned char 8 0 255 signed char 8-128 127 short int 16-32768 32767 unsigned int 32 0 4 294 967 295 int 32-2 147 483 648 2 147 483 647 unsigned long 32 0 4 294 967 295 long 32-2 147 483 648 2 147 483 647 float 32 1,18*10-38 3,40*10 38 double 64 2,23*10-308 1,79*10 308 long double 80 3,37*10-4932 1,18*10 4932 Deklaracja zmiennych w języku C++ odbywa się w następujący sposób: na początku podajemy typ zmiennej deklarowanej, następnie podajemy nazwę zmiennej deklarowanej pamiętając o zasadach nadawania identyfikatorów, za koniec dodajemy znak średnika. Przykład: int liczba1; long int zmienna; Język C++ dopuszcza deklarowanie w jednym wierszu wielu zmiennych tego samego typu np. int liczba1, liczba2, liczba3, wartosc, dana; Istnieje możliwość nadania wartości początkowej zmiennej w czasie jej deklaracji np. double liczba = 3.56754;

4 Deklaracja zmiennej tekstowej odbywa się za pomocą deklarowania tablicy zmiennych znakowych char np. char imie[10] = "Jan"; char nazwisko[20] = "Kowalski"; Cyfry 10 i 20 w nawiasach kwadratowych oznaczają rozmiar tablicy (ilość znaków tablicy). Przypisanie zmiennej tekstowej wartości może odbywać się na kilka sposobów np. za pomocą wprowadzenia tekstu z klawiatury instrukcją cin czy przypisanie tekstu podczas inicjacji zmiennej (co zostało pokazane powyżej). W języku C++ rozróżniamy zmienne lokalne i globalne. Zmienne lokalne to takie zmienne, których widoczność (zasięg działania) ogranicza się do bloku programu ujętego w nawiasy klamrowe. Np. void main(void) int dana;......... W powyższym przykładzie zmienna dana jest widoczna dla funkcji main. Deklaracja zmiennych może odbywać się w dowolnym miejscu w bloku programu, lecz najlepiej (najbardziej przejrzyście) zapisywać deklaracje za znakiem. Zmienna dana i wynik będzie także widoczna w pętli for umieszczonej w funkcji main: #include <vcl.h> #include <conio.h> #include <iostream.h>

5 void main(void) int dana = 8; int wynik = 1; for (int i = 1; i <= dana; i++) wynik *= i; printf("iloczyn = %d\n",wynik); getch(); Zmienne globalne są to zmienne, które są widoczne w całym pliku kodu źródłowego od miejsca deklaracji. Przykład: #include <vcl.h> #include <conio.h> #include <iostream.h> int liczba = 100; void zamiana(void) liczba++; cout << "Wartosc zmiennej w funkcji zmiana jest rowna: " << liczba << endl;

6 void main(void) liczba++; cout << "Wartosc zmiennej w funkcji main jest rowna: " << liczba << endl; zamiana(); getch(); Wynikiem działania programu jest wyświetlanie wartości zmiennej liczba która wynosi: 101 a następnie 102. Czyli deklaracja i działanie zmiennych globalnych jest podobne do działania i deklaracji zmiennych lokalnych Język C++ dopuszcza nadawanie takich samych nazw dla zmiennej lokalnej i globalnej. W takim przypadku trzeba znać reguły postępowania aby poprawnie korzystać z tych zmiennych. W sytuacjach konfliktowych kompilator daje priorytet zmiennej lokalnej. Jest możliwość odwołania się z dowolnej funkcji do zmiennej globalnej w przypadku gdy istnieje w tym bloku programu zmienna lokalna o takiej samej nazwie. Odwołanie to odbywa się przy użyciu operatora widoczności ::. Przykład: ::dana = 1; Jedną z zasad programowania w C++ jest zasada unikania zmiennych globalnych. Nadając nazwy zmiennym należy: nadawać nazwy które kojarzą się z daną zmienną, nie nadawać nazw słów kluczowych, pisać komentarze obok zmiennych, opisując cel ich stosowania, pamiętać o regułach nadawania nazw (identyfikatorów) w języku C++.

7 2.2. Przypisywanie wartości zmiennym Zmiennym w C++ możemy przypisać wartości na dwa sposoby (używamy operatora przypisania =): podczas deklaracji zmiennej np. int zmienna = 20; float liczba = 123.78; w dowolnym miejscu w programie (po uprzedniej deklaracji typów zmiennych) np. int zmienna; float liczba;...... zmienna = 20; liczba = 123.78; Przypisując wartość zmiennym należy pamiętać o typie zmiennej. 2.3. Operacje wejścia wyjścia Używając standardowego strumienia wyjściowego cout (umieszczonego w bibliotece iostream.h) można wyświetlać na ekranie monitora liczby i znaki, cout << tekst ; cout << zmienna; Przykład: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int dana = 34; cout << "To jest komunikat ";

8 cout << 123 << " "; cout << "Wartosc zmiennej dana wynosi: " << dana; cout << endl << "Przejscie do nastepnej linii"; getch(); Wczytywanie danych z klawiatury i przypisanie ich do zmiennych można wykonać za pomocą instrukcji strumieniowej cin cin >> zmienna [ >> zmienna] Przykład: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int zmienna1, zmienna2, zmienna3; cout << "Podaj jedna liczbe calkowita i nacisnij enter "; cin >> zmienna1; cout << endl << "Podaj dwie liczby calkowite oddzielone spacja "; cin >> zmienna2 >> zmienna3; cout << endl << "Wpisane liczby to: " << zmienna1 << " i " << zmienna2 << " oraz " << zmienna3; getch(); zmienna3;

9 Korzystając z tej instrukcji wprowadzania danych należy pamiętać o możliwości wystąpienia błędów nadmiaru jak i błędy typów. Powstanie tego typu błędów wiąże się z wprowadzeniem przez użytkownika niepoprawnej liczby czy tekstu. Język C/C++ pozwala korzystać z kilku metod wejścia - wyjścia. Oprócz podanych wcześniej cin oraz cout istnieje biblioteka zawierająca wiele różnych operacji wejścia - wyjścia - stdio.h Przykładowe operacje: otwieranie i zamykanie strumieni: fclose, fopen, freopen, podstawowe funkcje wyjścia: fputc, fputs, fwrite, puts, putc, wyjście sformatowane: printf, sprintf, podstawowe funkcje wejścia: getc, gets, fgets, fread, getchar, wejście sformatowane: fscanf, scanf, vscanf, sterowanie wskaźnikiem pozycji strumienia: fgetpos, fseek, 2.4. Instrukcje warunkowe Instrukcja warunkowa if sprawdza czy badana zależność (wyrażenie warunkowe) zachodzi czy nie. Jeśli tak to wykonywana jest Instrukcja1, jeśli nie to nic nie jest wykonywane lub możliwe jest wykonanie Instrukcji2. if (wyrażenie warunkowe) instrukcja1 [else instrukcja2] Przykłady: instrukcja prosta I: if (a<= b) c = 2; instrukcja prosta II: if (a <= b) c = 2;

10 else c = 1; instrukcja złożona (grupowanie instrukcji): if (a <= b) c = 2; d = 3; else c = 1; d += c; instrukcja złożona (zagnieżdżanie instrukcji I): if (a <= b) if (i == 0) c = 2; d = 3; else c = 1; d += c; instrukcja złożona (zagnieżdżanie instrukcji II): if (a > b) c = 1; d = 2;

11 else if (a == b) c = 2; d = 3; else c = 3; d = 4; Instrukcja switch pozwala przenieść wykonywanie programu (poprzez wybór odpowiedniej opcji) do wskazanego miejsca. Postać ogólna instrukcji sterującej: switch (wyrażenie sterujące) etykieta-wyboru instrukcje;...; etykieta-wyboru instrukcje; Przykład: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) cout << "Nacisnij klawisz z zakresu: 0-9 i a-z" << endl; char klawisz = getch(); switch (klawisz) case '1': cout << "Wybrales klawisz 1";

12 break; case 'a': cout << "Wybrales klawisz a"; break; default: cout << "Wybrales klawisz rozny od 1 i a"; getch(); Opcja default jest etykietą domyślną wyboru. Program przechodzi w to miejsce gdy nie znajdzie odpowiedniej etykiety po wyrażeniu case. Instrukcja break wymusza zakończenie wykonywania instrukcji wyboru. 2.5. Błędy podczas programowania Najczęściej popełniane błędy w trakcie programowania to: - Błędy syntaktyczne Każdy język ma swój zbiór reguł. Ma go też C/C++. Zdania w języku polskim kończą się zwykle kropką, wykrzyknikiem lub znakiem zapytania. Analogicznie na początku zdania jest duża litera. Język C++ w swojej składni używa nawiasów, nawiasów klamrowych, cudzysłowów oraz wielu innych symboli. Używając ich w nieprawidłowy sposób uniemożliwiamy kompilatorowi utworzenie pliku wykonywalnego. Kompilator w trakcie kompilacji zasygnalizuje w którym wierszu wystąpił błąd (błędy). Po ich usunięciu kompilator utworzy plik wykonywalny. - Błędy nadmiaru Błędy tego typu są niezwykle trudne do wykrycia i poprawienia. W momencie ich wystąpienia kompilator nie sygnalizuje ich. Błędy te powstają na skutek przypisania zmiennym wartości wykraczające poza pojemność przydzielonego miejsca w pamięci.

13 Przykład błędu nadmiaru: int liczba1 = 2147483647; int liczba2 = 1; int wynik = 0; wynik = liczba1 + liczba2; W wyniku wykonania tej operacji otrzymamy wynik = -2147483648. Zakres typu int: -2147483648 do 2147483647. Operując na zmiennych trzeba zawsze mieć na uwadze zakres wartości jaki może przechowywać dana zmienna czy dane zmienne. - Błędy typów Występujące często przy wprowadzaniu z klawiatury danych do programu. Jeżeli do programu wprowadzimy dane typu niezgodnego z oczekiwanym przez program, wystąpią błędy powodujące zakończenie pracy programu lub błędne wprowadzenie danych do zmiennej (zmiennych). Dlatego trzeba pamiętać, aby program został prawidłowo zabezpieczony przed takimi błędami. 2.6. Operatory Operatory arytmetyczne Operatory arytmetyczne dzielimy na operatory: inkrementacji, dekrementacji, addytywne oraz multiplikatywne. Operatory addytywne: +, - operand1 + operand2 - dodawanie operandów operand 1 - opreand2 - odejmowanie operandów Operatory multiplikatywne: *, /, % operand1 * operand2 operand1 / operand2 operand1 % operand2 - mnożenie operandów - dzielenie operandów - reszta z dzielenia Operator inkrementacji i dekrementacji: ++, -- ++operand - przedrostkowy operator inkrementacji operand++ - przyrostkowy operator inkrementacji

14 --operand operand-- - przedrostkowy operator dekrementacji - przyrostkowy operator dekrementacji Wyjaśnienie działania operatorów de - i inkrementacji: Operator inkrementacji ++ powoduje, że operand zwiększa swoją wartość o 1, natomiast operator dekrementacji -- powoduje zmniejszenie się wartości operandu o 1. Istotne jest umieszczenie operatora -- lub ++. Jeśli operator zostanie umieszczony przed operandem, najpierw zostanie powiększona (pomniejszona) wartość operandu a potem zostanie obliczone wyrażenie, w którym znajduje się taki operand. Inna sytuacja jest wtedy, gdy operator został umieszczony po operandzie. W tym przypadku najpierw zostaje obliczone wyrażenie w którym znajduje się operand a następnie operand zwiększa (zmniejsza) swoja wartość o 1. Działanie tych operatorów zostanie pokazane na przykładzie. Przykład: int liczba1 = 2, liczba2 = 7, wynik; wynik = (liczba2--) - (++liczba1); Obliczenie wyniku przebiega w następujący sposób: od wartości zmiennej liczba2 odjęta zostaje wartość zmiennej liczba1 zwiększona o 1. Czyli zmienna wynik = 4. Następnie wartość zmiennej liczba2 zostaje zmniejszona o 1. W ten sposób końcowe wartości zmiennych liczba1 = 3 a liczba2 = 6. Operatory bitowe Za pomocą operatorów bitowych można realizować funkcje logiczne takie jak: OR, AND, EXOR, NOT. Operatory funkcji binarnych: operand1 & operand2 - iloczyn (AND) operand1 ^ operand2 - suma modulo 2 (EXOR) opreand1 operand2 - alternatywa (OR) ~operand1 negacja Korzystając z tych operatorów należy zdawać sobie sprawę, że działają one na bitach oraz znać zasady działania tychże operatorów. Korzystnie jest wtedy zapisywać liczby w postaci binarnej (dwójkowej) lub szesnastkowej.

15 Przykład: int liczba1 = 0x01; int liczba2 = 0x02; int wynik; wynik = (liczba1 & liczba2); Wynikiem działania tego programu jest wartość 0. Operatory logiczne Operatory logiczne działają na wartościach logicznych: prawda oraz fałsz. Reprezentacja wartości logicznych: Prawda - liczba całkowita większa od zera, Fałsz - zero (całkowite), Operandy i wyrażenia logiczne: operand1 && operand2 - koniunkcja operand1 II operand2 - alternatywa!operand1 negacja Przykład: Dane jest równanie ax^2 + by = 0 if (a!= 0 && b == 0) cout << Rownanie ma jeden podwojny pierwiastek w zerze ; Operatory przesunięcia Operatory przesunięcia w prawo >> i w lewo <<. Operatory te działają na bitach. Wyrażenia z operatorami przesunięcia: operand1 << operand2 - przesuń operand1 w lewo o operand2 bitów operand1 >> operand2 - przesuń operand1 w prawo o operand2 bitów Operandy musza być typów całkowitych. Przy przesuwaniu liczb bez znaku w lewo, młodsze bity są uzupełniane zerami. Przy przesuwaniu liczb bez znaku w prawo, wszystko zależy od operandu1. Jeśli jest on liczbą bez

16 znaku to najstarsze bity są uzupełniane zerami, w przeciwnym razie są uzupełniane bitami znaku. Przykład: a = 6 c = a << 2; W tym przykładzie c będzie miało wartość 24, ponieważ a = 00000110, przesuwamy w lewo o 2 czyli c = 00011000 a to jest liczba 24. Przy przesuwaniu liczby ze znakiem, należy uważać aby nie zmienić bitu znaku na przeciwny. Taka zmiana jest spowodowana kodowaniem liczby w kodzie uzupełnień do 2. Operatory przypisania Prosty operator przypisania: = Złożone operatory przypisania: +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, = Prosty operator: operand1 = operand2 - przypisanie wartości operandu2 operandowi1 Przykład int a, b, c, d; a = 12; b = c = d = 5; Złożone operatory: Konstrukcja tych operatorów składa się z operatorów wcześniej poznanych i operatora przypisania. Sposób korzystania z tych operatorów został przedstawiony na przykładzie poniżej. a += b + c zastępuje zapis a = a + b + c a *= b zastępuje zapis a = a * b

17 Operatory porównania Zachodzące relacje pomiędzy operandami określają operatory relacyjne. Operatory relacyjne i relacje w języku C++: operand1 > operand2 - operand1 większy niż operand2 operand1 < operand2 - operand1 mniejszy niż operand2 operand1 <= operand2 - operand1 mniejszy równy od operandu2 operand1 >= operand2 - operand1 większy równy operandu2 operand1 == operand2 - operand1 równy operandu2 operand1!= operand2 - operand1 różny od operandu2 Przykłady: if (a == b) if (a!= b) if ((a > b) && (c <= d))

18 3. Przebieg ćwiczenia zadania do wykonania Wymagana znajomość zagadnień z ćwiczenia 1. 3.1. Przepisać przykład z ćwiczenia Inf_2_1 (punkt 2.4) (Pole i obwód koła) i uruchomić go. 3.2. Zmodyfikować program z zadania 3.1. tak, aby wartość zmiennej Promien była wczytywana z klawiatury. 3.3. Zadeklarować dwie zmienne liczbowe, przypisać im wartości i wyświetlić wynik operacji dodawania, odejmowania, mnożenia i dzielenia (z opisem co to za operacja). 3.4. Zmodyfikować zadanie z ćwiczenia 3.3 w taki sposób, aby liczby wczytywane były z klawiatury. 3.5. Sprawdzić błędy przepełnienia np. dla zmiennych typu int (dla kompilatora Borland C++ Builder 6). 3.6. Napisz program, który wczytuje z klawiatury liczbę i podaje jej kwadrat, sześcian i pierwiastek (użyć funkcji pow). 3.7.Napisz program, który sprawdza czy wprowadzona z klawiatury liczba jest z określonego zakresu np. <-5, 10>. Wyświetlić odpowiedni komunikat. 3.8. Napisz program, który wyznacza największą i najmniejszą liczbę spośród trzech podanych przez użytkownika wartości a, b, c. 3.9. Napisz program, który wyświetli trzy podane przez użytkownika wartości: a, b, c w kolejności rosnącej (malejącej). 3.10. Napisać program do obliczania równania kwadratowego. Dane wczytywane są z klawiatury.

19 3.11. Napisz program, który automatycznie wystawia ocenę w zależności od ilości wpisanych z klawiatury punktów. Przykładowa zależność oceny od ilości zdobytych punktów: Zakres punktów Ocena <0, 60) 2 <60, 73) 3 <73, 86) 4 <86, 100> 5 Punkty mogą przyjmować wartości za zbioru liczb rzeczywistych. 3.12. Napisz program, który wykonuje operacje bitowe AND i OR na dwóch wprowadzonych z klawiatury liczbach (z zakresu od 0 do 255) (deklaracja typu liczb unsigned int). Utworzyć menu wyboru operacji tz. naciśnięcie klawisza 1 powoduje obliczenie i wyświetlenie wyniku operacji AND, 2 OR. Do tworzenia menu należy użyć instrukcji switch. 3.13. Napisz program, który wykonuje bitową operację przesunięcia na liczbie wprowadzonej z klawiatury (z zakresu od 0 do 255) (deklaracja typu liczb unsigned int). Program pobiera dwie dane: liczbę i wartość przesunięcia (w lewo lub w prawo).

UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY w Bydgoszczy ZAKŁAD ELEKTROENERGETYKI LABORATORIUM INFORMATYKI INSTRUKCJA DO ĆWICZENIA III Instrukcje iteracyjne (pętle programowe) Opracował: dr inż. Marcin Drechny Luty 2012 r.

2 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z konstrukcją i użyciem instrukcji iteracyjnych (pętli programowych) for oraz while. 2. Wprowadzenie Instrukcje iteracyjne są jednymi z częściej stosowanych instrukcji w języku C/C++. Służą one do powtarzania większej liczby instrukcji określoną liczbę razy lub tak długo jak założony warunek jest spełniony (lub niespełniony). Rozróżniamy instrukcje iteracyjne for oraz while (do while). 2.1. Pętla for Instrukcja for: for (wyrażenie inicjujące; wyrażenie warunkowe; wyrażenie zwiększające) instrukcja Przykład obliczania silni z 10: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int w = 1; for (int i = 1; i < 11; i++) w *= i; cout << "Silnia z 10 wynosi: " << w; getch();

3 Wykonanie pętli w powyższym przykładzie odbywa się w następujący sposób: obliczone zostaje wyrażenie inicjujące (w tym przykładzie i = 1), obliczone zostaje wyrażenie warunkowe (w przykładzie i < 11) i uruchamiana zostaje pętla, wykonywane są operacje wewnątrz pętli, w tym przypadku instrukcja w *= i;, ponownie obliczany jest warunek i ponownie wykonywane są działania wewnątrz pętli do momentu gdy warunek będzie fałszem, czyli, gdy i będzie > lub = 11 pętla i program kończy działanie. Należy uważać przy używaniu operatora == w wyrażeniu warunkowym, gdyż często prowadzi to do błędów np. nieskończonego działania pętli: w = 1; for (i = 0; i == 103453; i += 2 ) w += i; Istnieje możliwość umieszczania większej ilości wyrażeń inicjujących, wyrażeń warunkowych lub wyrażeń zwiększających. W takim przypadku przedzielamy wyrażenia znakiem przecinka np. int i = 2; int j; for (i, j = 0; i < 21; i++, j = pow(i, 2)) cout << i <<, << j << endl;

4 2.2. Pętla while Instrukcja while: while (wyrażenie warunkowe) instrukcja Pętla while wykonywana jest do momentu gdy wyrażenie warunkowe osiągnie fałsz (0). Inaczej mówiąc, pętla while będzie działać czyli będzie wykonywana instrukcja lub grupa instrukcji, dopóki wyrażenie warunkowe jest prawdą. Należy pamiętać, że na początku sprawdzany jest warunek a potem jeżeli jest on prawdziwy, wykonywana jest instrukcja lub grupa instrukcji. Przykład: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int ilosc; int i = 1; cout << "Ile razy ma sie wykonac petla?" << endl; cin >> ilosc; while (i <= ilosc) cout << "Petla wykonuje sie po raz" << i << endl; i++; getch();

5 2.3. Pętla do..while Instrukcja do.. while: do instrukcja; while (wyrażenie warunkowe); Pętla do.. while wykonywana jest do momentu gdy wyrażenie warunkowe osiągnie fałsz (0). Inaczej mówiąc, pętla while będzie działać czyli będzie wykonywana instrukcja lub grupa instrukcji, dopóki wyrażenie warunkowe jest prawdą. Należy pamiętać, że przed sprawdzeniem warunku wykonywana jest instrukcja (grupa instrukcji). Następnie jest sprawdzany warunek i jeżeli jest on prawdziwy, to pętla wznawia swoje działanie. To jest różnica pomiędzy pętlą while a do.. while. Przykład: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int i = 1; int ilosc = 0; do cout << "Petla wykonuje sie " << i << " raz " << endl; i++; while (i <= ilosc); getch();

6 2.4. Instrukcje sterujące przebiegiem programu Instrukcja break Instrukcja ta powoduje porzucenie aktualnego poziomu pętli lub instrukcji wyboru. Należy pamiętać, że opuszczamy tylko jeden poziom. Gdy instrukcje np. pętli są kilkukrotnie zagnieżdżone aby wyjść całkowicie z pętli, należy w odpowiednim miejscu użyć kilkukrotnie instrukcji break. Instrukcja continue Jej użycie powoduje: w przypadku pętli while i while.. do, przeniesienie sterowania z wnętrza pętli do wyrażenia warunkowego, które zostaje obliczone. W zależności od uzyskanego wyniku wykonywanie pętli jest kontynuowane lub zakończone, dla pętli for przeniesienie sterowania do wyrażenia zwiększającego liczniki pętli, w przypadku wielokrotnie zagnieżdżonych pętli instrukcja continue jest wiązana z najbliższą instrukcją iteracyjną. Instrukcja return Zakończenie wykonywania funkcji. Jeśli funkcja zwraca wartość to piszemy: return zwracana-wartość.

7 3. Przebieg ćwiczenia zadania do wykonania Wymagana znajomość zagadnień z ćwiczenia 1 i 2. 3.1. Zmodyfikować przykład z silnią w taki sposób, aby liczbę z której wyznaczona zostanie silnia wprowadzać z klawiatury. Sprawdzić, z jakiej największej wprowadzonej z klawiatury wartości można obliczyć silnię, dla założonego typu zmiennej, aby wynik był poprawny! (użyć pętli for lub while) 3.2. Napisać program, który wyznacza średnią z wartości wprowadzonych z klawiatury: a) ilość wprowadzanych liczb jest ustalona z góry, (for) b) liczba danych wprowadzanych do programu jest wpisywana jako pierwsza dana do programu po czym następuje wprowadzanie kolejnych liczb z których należy obliczyć średnią, (for) c) nie jest znana liczba wprowadzanych danych do programu, wprowadzanie trwa tak długo, aż wybierzemy opcję obliczania średniej z liczb już wprowadzonych. (while) 3.3. Napisać program, który sprawdza czy liczba wpisana z klawiatury jest mniejsza lub większa od założonej wartości umieszczonej w programie. Program informuje użytkownika odpowiednim komunikatem aby ten wpisał mniejszą lub większą liczbę. Program kończy działanie gdy wpiszemy wartość równą założonej wartości umieszczonej w programie. (while) 3.4. Zmodyfikować program z zadania 3.3, tak aby wartość w programie została wygenerowana losowo z zakresu np. od 20 do 50. (while, randomize, random) 3.5. Napisać program, który sprawdza czy wprowadzona z klawiatury liczba X jest liczbą pierwszą. 3.6. Napisać program, który wyznacza liczby pierwsze od 0 do X, gdzie X jest liczbą całkowitą zadaną przez prowadzącego. 3.7. Zmodyfikować program 3.6. w taki sposób aby liczby pierwsze były wyznaczane

8 z zakresu od X do Y, gdzie X, Y liczby całkowite podane przez prowadzącego oraz Y>X. 3.8. Napisać program, który generuje 100 liczb losowych o rozkładzie normalnym ze wzoru: ( 2* π ) z = 2*ln x x, gdzie z wygenerowana liczba o rozkładzie 1 *sin * 2 normalnym, x 1 oraz x 2 liczby losowe o rozkładzie równomiernym. Wygenerowane liczby x 1 i x 2 powinny mieć dokładność minimum do czwartego miejsca po przecinku. W trakcie generowania należy liczyć ile liczb jest znajduje się w zadanych poniżej przedziałach. Liczebności danych przedziałów należy wyświetlić na ekranie. Przykładowe przedziały: (-, -10>, (-10,-8>, (-8, -6>, (-6, -4>, (-4, -2>, (-2, 0>, (0, 2>, (2, 4>, (4, 6>, (6, 8>, (8, 10>, (10, >. 3.9. Napisać program wyświetlający tabliczkę mnożenia dla wartości od 1 do 10 (zagnieździć pętlę for w pętli for, do wyświetlania danych użyć funkcji cout ze specyfikatorem setw()) 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100

UNIWERSYTET TECHNOLOGICZNO-PRZYRODNICZY w Bydgoszczy ZAKŁAD ELEKTROENERGETYKI LABORATORIUM INFORMATYKI INSTRUKCJA DO ĆWICZENIA IV Tablice jedno i wielowymiarowe Opracował: dr inż. Marcin Drechny Luty 2012 r.

2 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z deklaracją i wykorzystaniem tablic jedno i wielowymiarowych. 2. Wprowadzenie Tablica jest strukturą danych, dzięki której jedna zmienna może przechowywać wiele wartości. Aby zadeklarować tablicę trzeba określić jej typ i rozmiar. Deklarując tablice można przy operatorze przypisania nadać wartości początkowe jej elementom. Wszystkie elementy tablicy są takiego samego typu np. int, float, char. Wstawiając wartość do tablicy należy podać numer indeksu tablicy, pod którym wartość ma zostać umieszczona. Dostęp do danych umieszczonych w tablicy uzyskujemy poprzez podanie nazwy tablicy i numeru elementu. Pierwszy indeks tablicy ma zawsze wartość 0. Ostatni indeks ma wartość taką jaką zadeklarowano w nawiasach kwadratowych pomniejszoną o 1. Deklaracja tablicy: typ_tablicy nazwa_tablicy [rozmiar]; Przykłady deklaracji: int dane [1000]; - int: typ danych, dane: nazwa tablicy, [1000]: rozmiar tablicy, float pozycja [10][10]; - deklaracja tablicy dwuwymiarowej typu float o 100 elementach, int liczby[3] = 20, 30, 40; - inicjalizowanie tablicy przy deklaracji,

3 Przykład użycia tablicy: #include <vcl.h> #include <iostream.h> #include <conio.h> void main (void) int dane [4]; for (int i = 0; i < 4; i++) dane[ i ] = i * i; for (int i = 0; i < 4; i++) cout << "Element " << i << " tablicy wynosi: " << dane[ i ] << endl; getch(); Poniższy obraz przedstawia wynik działania powyższego programu. Tablice wielowymiarowe Tablice wielowymiarowe są deklarowane w podobny sposób jak tablice jednowymiarowe z tą różnicą, że ilość wymiarów oznaczają pary nawiasów kwadratowych np.: int tablica[100][100][100]; - deklaracja tablicy trójwymiarowej typu int o 1 000 000 elementów. Przykład wypełnienia i pomnożenia tablicy dwuwymiarowej przez liczbę 2.

4 Przykład: #include <vcl.h> #include <iostream.h> #include <iomanip.h> #include <conio.h> void main(void) int tablica[5][5]; clrscr(); for (int i = 0; i < 5; i++) for (int j = 0; j < 5; j++) tablica[i][j] = i * 2; cout << setw(6) << tablica[i][j]; cout << endl; getch();

5 3. Przebieg ćwiczenia zadania do wykonania Wymagana znajomość zagadnień z ćwiczenia 1, 2, i 3. 3.1. Zadeklarować tablicę 50 elementową jednowymiarową i wypełnić ją losowo wartościami rzeczywistymi z zakresu od 20 do 70 (skorzystać z funkcji losowych randomize oraz random). Wartości umieszczone w tablicy wyświetlić na ekranie monitora. 3.2. Obliczyćśrednią z tablicy w zadaniu 3.1 i jej wartość wyświetlić na ekranie. 3.3. Obliczyć odchylenie standardowe z tablicy z zadania 3.1. Odchylenie standardowe: s = 1 1 n n ( x i x) i= 1 2, gdzie x - średnia z wartości w tablicy, x i - bieżąca wartość w tablicy. Wyświetlić wartość odchylenia standardowego na ekranie. 3.4. Zadeklarować trzy tablice jednowymiarowe o takim samym rozmiarze np. 10. Dwie pierwsze tablice wypełnić z klawiatury liczbami. Następnie: a) zsumować wartości wszystkich elementów w tablicy pierwszej i drugiej i wyświetlić sumę na ekranie monitora, b) dodać elementy tablic do siebie (pierwszy element 1 tablicy i pierwszy element 2 tablicy, itd.) a wynik takiego sumowania wpisać do tabeli trzeciej. Wyświetlić wszystkie trzy tablice na ekranie. 3.5. Zadeklarować tablicę tekstową jednowymiarową, minimum 20 elementów i wpisać do niej tekst element po elemencie (z klawiatury). Wyświetlić wpisany tekst na ekranie. (Pamiętać, że ostatnim elementem jest znak NULL) 3.6. Zadeklarować tablicę jednowymiarową 50 elementową. Wygenerować funkcję sinus lub kosinus a próbki (wartości) zapisać do tablicy. Zapamiętany przebieg funkcji ma mieć jeden pełny okres. Dane częstotliwość przebiegu, amplitudę i fazę poda prowadzący. Wyświetlić zawartość tablicy w dwóch kolumnach. 3.7. Zadeklarować tablicę dwuwymiarową 5x5. Wpisać do niej wartości i transponować ją. Wyświetlić początkową zawartość tablicy jak i wynik transponowania.

6 3.8. Zadeklaruj tablicę dwuwymiarową o 3 kolumnach i 15 wierszach. Pierwszą kolumnę wypełnij wartościami całkowitymi losowymi z zakresu od 20 do 80. Do drugiej kolumny tablicy przepisz tylko wartości parzyste z pierwszej kolumny. Do trzeciej kolumny tablicy przepisz tylko wartości nieparzyste. (randomize(), rand())