4. Instrukcje sterujące przebiegiem programu
4.1 Wykorzystanie instrukcji sterujących w pisaniu programów.
Cele ćwiczenia:
umiejętność budowania algorytmów i ich postaci graficznej
zapoznanie z instrukcjami break, continue i goto i ich zastosowaniem w programach
wydruk na ekranie - kolor wydruku, formatowanie wydruku.
Nowe zagadnienia:
instrukcje break „przerwij”, continue „kontynuuj”,
instrukcja skoku goto,
organizacja ekranu w trybie tekstowym, bajt atrybutów,
biblioteka conio
Definicje nowych pojęć
Grupa instrukcji sterująca przebiegiem programu (break, continua, goto oraz return) umożliwiają opuszczenie pętli, przeniesienie wykonywania programu w inne miejsce, zakończenie wykonywania i zwrócenie wartości funkcji. Instrukcja return będzie szerzej omówiona przy omawianiu funkcji.
Instrukcja break „przerwij” powoduje opuszczenie aktualnego poziomu pętli lub instrukcji wyboru. Dopuszczalne zastosowanie tylko w tych instrukcjach.
składnia break;
Instrukcja continue „kontynuuj” powoduje przejście do następnej iteracji. Dopuszczalne zastosowanie tylko w instrukcjach iteracyjnych.
składnia continue;
Instrukcja skoku goto „skocz” umożliwia przekazanie sterowania do określonego miejsca wewnątrz aktualnie wykonywanej funkcji (zasada) programu. Etykieta określa miejsce w programie, do którego ma nastąpić skok.
składnia goto etykieta;
goto PROG_1;
ciąg instrukcji;
PROG_1:
{
instrukcje
}
Wydruk na ekranie
Każdemu znakowi wyświetlanemu na ekranie odpowiadają dwa bajty: bajt wartości i bajt atrybutów. Bajt wartości znaku odpowiada wartości wynikającej z aktualnej tablicy znaków np. tablicy ASCII. Bajt atrybutów odpowiada za kolor i ewentualnie migotanie (blink) znaku.
Bajt atrybutów znaku
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
migotanie |
Kolor tła |
jasność |
Kolor znaków |
Do obsługi atrybutów znaku stosuje się funkcje znajdujące się w bibliotece conio.h, conio.c.
Wybrane funkcje:
ustawienie atrybutu znaku: void textattr (int attr) np. textattr(164);
ustawienie koloru tła znaku: void textbackground (int color) np. textbackground(4);
ustawienie koloru znaku: void textcolor (int color) np. textcolor(BLUE);
Stałe kolorów
stała |
wartość c |
Kolor |
zastosowanie |
BLACK |
0 |
czarny |
tło i znak |
BLUE |
1 |
niebieski |
tło i znak |
GREEN |
2 |
zielony |
tło i znak |
CYAN |
3 |
turkusowy |
tło i znak |
RED |
4 |
czerwony |
tło i znak |
MAGENTA |
5 |
karmazynowy |
tło i znak |
BROWN |
6 |
brązowy |
tło i znak |
LIGHTGRAY |
7 |
jasnoszary |
tło i znak |
DARKGRAY |
8 |
ciemnoszary |
znak |
LIGHTBLUE |
9 |
jasnoniebieski |
znak |
LIGHTGREEN |
10 |
jasnozielony |
znak |
LIGHTCYAN |
11 |
jasnoturkusowy |
znak |
LIGHTRED |
12 |
jasnoczerwony |
znak |
LIGHTMAGENTA |
13 |
jasnokarmazynowy |
znak |
YELLOW |
14 |
żółty |
znak |
WHILE |
15 |
biały |
znak |
BLINK |
128 |
migotanie |
znak |
Inne funkcje do obsługi trybu tekstowego:
czyszczenie ekranu: void clrscr(void); np. clrscr();
pobieranie znaku z klawiatury: int getch(void); np. getch();
pobieranie znaku z klawiatury i przekazanie go na ekran:
int getche(void); np. getche();
przesunięcie kursora do wybranego miejsca na ekranie
void gotoxy (int x, int y); np. gotoxy (20,30);
umieszczenie tekstu w określonym oknie na ekranie
void puttext (int left, int top, int right, int bottom, *text) np. puttext(2,4,45,20,”Tabela”);
Zadanie 1
Program wyznaczenia iloczynu ciągu liczb całkowitych o określonej długości różnych od zera.
#include <iostream.h>
#include <conio.h>
main()
{
int liczba, iloczyn=1, dlugosc, i, poprawny=1;
cout<<”Podaj dlugosc ciagu liczb”<<endl;
cin>>dlugosc;
cout<<”Podaj liczby”<<endl;
for (i=1; i<=dlugosc; i++)
{
cin>>liczba;
if (liczba==0)
{
poprawny=0;
break;
}
iloczyn*=liczba;
}
if (poprawny)
cout<<”Iloczyn liczb wynosi:”<<iloczyn;
else
cout<<”Blad danych”;
getch();
return 0;
}
Zadanie 2
Napisz program do wyznaczenia iloczynu liczb rzeczywistych większych od zera znajdujących w ciągu liczb o określonej długości.
#include <iostream.h>
#include <conio.h>
main()
{
float liczba, iloczyn=1, dlugosc, i;
cout<<”Podaj dlugosc ciagu liczb”<<endl;
cin>>dlugosc;
cout<<”Podaj liczby”<<endl;
for (i=1; i<=dlugosc; i++)
{
cin>>liczba;
if (liczba<=0)
{
cout<<”Przejdz do kolejnej liczby ciagu”;
continue;
}
iloczyn*=liczba;
}
cout<<”Iloczyn liczb wynosi:”<<iloczyn;
getch();
return(0);
}
Zadanie 3
Program wyznaczenia iloczynu ciągu liczb całkowitych o określonej długości różnych od zera.
#include <iostream.h>
#include <conio.h>
main()
{
int liczba, iloczyn=1, dlugosc, i, blad=0;
cout<<"Podaj dlugosc ciagu liczb"<<endl;
cin>>dlugosc;
cout<<"Podaj liczby"<<endl;
for (i=1; i<=dlugosc; i++)
{
cin>>liczba;
if (liczba==0)
{ blad=1;
goto E1; }
iloczyn*=liczba;
}
cout<<"Iloczyn liczb wynosi:"<<iloczyn;
E1: if (blad)
cout<<"Blad danych";
getch();
return 0;
}
Zadanie 4
Napisz program do wydruku na ekranie imienia ANNA MARIA w 10 różnych kolorach na białym tle.
#include<iostream.h>
#include<conio.c>
main()
{
int i=1;
puttext(30,10,60,10,"Zadanie 4");
textbackground(15);
while(i<=10)
{
gotoxy(30,10+i);
textcolor(i);
cout<<" A N N A M A R I A"<<endl;
i++;
}
getch();
return 0;
}
Zadania 4.1
(do obsługi błędów w programach wykorzystaj instrukcje break lub goto,
do wyprowadzenia wydruków odpowiednie funkcje z biblioteki conio).
Narysuj schemat blokowy i napisz program, który z ciągu 15 liczb całkowitych będzie sumował liczby większe od 10. Wykorzystaj w programie instrukcję continue.
Narysuj schemat blokowy i napisz program badający czy z odcinków a, b i c można zbudować trójkąt i określający typ tego trójkąta (równoboczny, prostokątny, równoramienny, różnoboczny).
Narysuj schemat blokowy i napisz program wyznaczający wartość maksymalną z wprowadzonych z klawiatury 10 liczb rzeczywistych.
Narysuj schemat blokowy i napisz program, który dokonuje dzielenia dwóch liczb podanych przez Ciebie a następnie sprawdza czy wynik dzielenia zawiera się w przedziale 0-1.
Narysuj schemat blokowy i napisz program, który pobiera wartości dla 3 zmiennych i wykonuje: -mnożenie liczby drugiej przez trzecią, gdy liczba pierwsza jest większa od trzeciej i liczba druga jest większa od pierwszej, -dzielenie liczby drugiej przez trzecią, gdy liczba druga jest mniejsza od trzeciej albo mniejsza od pierwszej, -dodawanie wszystkich trzech liczb w przypadku, gdy liczba trzecia jest większa od pierwszej i liczba druga nie jest równa 5 lub liczba druga jest większa od trzeciej oraz liczba pierwsza nie jest równa zero.
Narysuj schemat blokowy i napisz program, który sprawdzi czy jesteś pełnoletni.
Narysuj schemat blokowy i napisz program, który oblicza sumę i długość ciągu liczb wprowadzonych z klawiatury.
Narysuj schemat blokowy i napisz program, który drukuje na ekranie sumowanie co czwartej liczby naturalnej z przedziału a,b.
Narysuj schemat blokowy i napisz program, który sprawdza czy w ciągu liczb występują liczby ujemne i jaki procent stanowią z całego ciągu.
Narysuj schemat blokowy i napisz program, który wczytuje oceny kolejnych uczniów i oblicza procentowy udział poszczególnych ocen (2,3,4,5) w analizowanej klasie.
Narysuj schemat blokowy i napisz program, który w zależności od podanego znaku przeprowadzi podstawowe działania kalkulatora (dodawanie, odejmowanie, mnożenie, dzielenie, potęgowanie, obliczanie procentów).
Narysuj schemat blokowy i napisz program, który realizuje drukowanie oceny ucznia w postaci słownej (użytkownik wpisuje ocenę z klawiatury numerycznej).
Narysuj schemat blokowy i napisz program, który realizuje polecenie kierownika sklepu muzycznego „ Jeśli kupisz 3 lub więcej płyt CD to za jedną sztukę zapłacisz o 10 zł taniej”. Normalna cena 1 sztuki wynosi 50 zł. Program ma drukować sumaryczną cenę płyt w zależności od ilości zakupionego towaru.
Narysuj schemat blokowy i napisz program, który testuje wzrost człowieka i przypisuje go do określonej grupy: wysoki, średni, niski, karzeł. Ustalić zakresy grup.
Narysuj schemat blokowy i napisz program, który znajduje rozwiązanie równania ax+b=0, ze sprawdzeniem poprawności wpisania danej a.
Narysuj schemat blokowy i napisz program, który wyświetli na ekranie następującą piramidę (wykorzystaj pętle while oraz manipulator setw).
*
***
*****
*******
Ćwiczenia laboratoryjne nr 4.1
„Język Programowania” str. 5
5