Cardinal przyjmuje wartość 375. Ile razy wykona się refren pętli. Podaj wartości zmiennych j



Pobieranie 258,82 Kb.
Strona1/2
Data15.04.2018
Rozmiar258,82 Kb.
  1   2

  1. Przed wykonaniem instrukcji zmienna x typu Cardinal przyjmuje wartość 375. Ile razy wykona się refren pętli. Podaj wartości zmiennych j oraz suma po każdym wykonaniu refrenu.

j:=7;

suma:=0;


while j<>0

do

begin


suma:= suma + x mod 10;

x:= x div 10;

j:= j div10

end;



  1. Napisać w Pascalu instrukcję podstawienia nadającą zmiennej boolowskiej OK wartość FALSE, gdy wartość zmiennej całkowitej P jest nieparzysta, a równocześnie

  • albo P jest ujemne

  • albo P zawiera się w zakresie 22..55

  • albo P jest większe od 200

zaś TRUE dla pozostałych wartości P.


  1. Napisać w Pascalu instrukcję, w wyniku wykonania której w przypadku, gdy zmienna całkowita K jest dodatnia, wówczas – ale tylko w przypadku, gdy zmienna boolowska BB ma wartość FALSE – zmienna całkowita S zwiększa swą wartość czterokrotnie, natomiast, gdy K dodatnia nie jest, zmienna S zmniejsza swą wartość o cyfrę jedności.




  1. Zapisz w języku Pascal instrukcję wyznaczania wartości niżej zdefiniowanej funkcji f(x) dla zadanego argumentu x, wynik ulokuj w zmiennej WartFun.

cos2 x + 1 x < -/2

f(x) = sin x  -/2  x  /2

cos x x > /2


  1. Zakładamy, że zdefiniowany został typ wyliczeniowy:

_KatZnaku=(smg, spg, cyfra, inny)

do odnotowania informacji przydzielającej znak do jednej z czterech kategorii (samogłoska, spółgłoska, cyfra, znak różny od cyfry i litery) oraz funkcja o nagłówku:



FUNCTION Kategoria ({we} znak: char):_KatZnaku;

{funkcja przekazuje do punktu wywołania kategorię znaku otrzymanego w parametrze znak}

Napisać sekwencję instrukcji nakazującą: wczytanie znaku pod zmienną ZnakBiez typu char, zakwalifikowanie go do jednej z czterech wymienionych kategorii (funkcja Kategoria) i na podstawie wyniku funkcji wyświetlenie jednego z napisów:


  • wczytany znak jest samogloska

  • wczytany znak jest spolgloska

  • wczytany znak jest cyfra

  • wczytany znak nie jest ani litera ani cyfra.



  1. W ciągu danego semestru ucznia obowiązuje K godzin lekcyjnych. Dyrekcja szkoły ustaliła p procentową barierę klasyfikacyjną i liczbową barierę LNU na nieobecności nieusprawiedliwione. Uczeń jest klasyfikowany, jeżeli łączna liczba nieobecności /usprawiedliwionych i nieusprawiedliwionych(w tym godziny karne za spóźnienia)/ nie przekracza p procent ogólnej liczby godzin w semestrze i liczba godzin nieusprawiedliwionych jest mniejsza od LNU.

UWAGA: 3 spóźnienia są traktowane jako 1 godzina nieobecności nieusprawiedliwionej, gdy liczba spóźnień nie jest podzielna przez 3 zaokrągla się na korzyść ucznia.

Napisać w języku Pascal procedurę o identyfikatorze OcenUcznia, która otrzymując w parametrach wejściowych: K /liczbę godzin w semestrze/, p /procentową barierę klasyfikacyjną/, LNU / liczbową barierę na nieobecności nieusprawiedliwione/, LnbUspr - liczbę godzin nieobecności usprawiedliwionych, LnbNUsor - liczbę faktycznych godzin nieobecności nieusprawiedliwionych, LSp - liczbę spóźnień przekazuje w parametrach wynikowych SumNb - sumaryczną liczbę nieobecności, NbNUspr - liczbę nieobecności nieusprawiedliwionych z uwzględnieniem godzin karnych za spóźnienia, Klasyfikowany - wartość TRUE jeśli uczeń będzie klasyfikowany, w przeciwnym razie FALSE.

Zakładamy ponadto, że jest już gotowa procedura:

PROCEDURE Pozyskaj kryteria (VAR K, LNU:Word; VAR p:Real);

Pozyskuje w trybie konwersacyjnym liczbę godzin w semestrze, barierę na nieobecności nieusprawiedliwione.




  1. Zakładamy, że zostały zdefiniowane typy:

_punkty= record

x: double;

y:double

end; {(x, y) – współrzędne punktu}

_prostokaty= record

LDolny: _punkty;

PGorny: _punkty

end;


{lewy dolny i prawy górny wierzchołek prostokąta o bokach równoległych do osi układy współrzędnych
Zakładamy ponadto, że mamy gotową procedurę o nagłówku:

procedure PozyskajPunkt (A: _punkty);

która w trybie konwersacyjnym pozyskuje informację o położeniu punktu.


Napisać procedurę o nagłówku:

procedure PozyskajProstokat (prost : _prostokaty);

która w trybie konwersacyjnym pobierze od użytkownika informację o położeniu prostokąta (lewy dolny i prawy górny wierzchołek) o bokach równoległych do osi układu współrzędnych. Zastosować pętlę zaporową uniemożliwiającą zaakceptowanie błędnych danych.

Uwaga: Do pozyskiwania informacji o jednym punkcie wykorzystać procedurę PozyskajPunkt. Kontrolować i poprawiać parę punktów (pełną informację o prostokącie).


  1. Zakładamy, że zostały zdefiniowane typy:

_punkty= record

x: double;

y:double

end; {(x, y) – współrzędne punktu}

_trojkaty= record

WA, WB, WC: _punkty; { wierzchołki trójkąta}

end;

Napisać procedurę o nagłówku:



procedure ObliczPoleObw(VAR Tr : _trojkaty;

VAR pole, obw:double);

która otrzymując w parametrze Tr informacje o położeniu trójkąta wyznaczy i przekaże w parametrach wynikowych pole i obw pole i obwód tego trójkąta. {zakładamy poprawność danych wejściowych}




  1. Zakładamy, że zdefiniowane zostały trzy procedury:


Procedure PozyskajTrojkat ({wy}var x1, y1, x2, y2, x3, y3:

double; var poprawne: boolean);

{Procedura pozyskuje w trybie konwersacyjnym współrzędne trzech wierzchołków trójkąta (x1, y1), (x2, y2), (x3, y3) i przekazuje w parametrze poprawne wartość true jeśli wprowadzone dane są poprawne (istnieje trójkąt o podanych wierzchołkach) , w przeciwnym razie false} .
Procedure ZbadajCzyWewnetrzny ({we} x1, y1, x2, y2, x3, y3,

x y: double; var PktWewn: boolean);

{Procedura otrzymując w parametrach współrzędne trzech wierzchołków trójkąta (x1, y1), (x2, y2), (x3, y3) i badany punkt (x, y) przekazuje w parametrze PktWewn wartość true jeśli punkt leży wewnątrz trójkąta, w przeciwnym razie false}.
Procedure WyznaczPoleTrojkata ({wy} x1, y1, x2, y2, x3, y3:

double; var pole: double);

{Procedura otrzymując w parametrach współrzędne trzech wierzchołków trójkąta (x1, y1), (x2, y2), (x3, y3) oblicza i przekazuje w parametrze pole wartość pola podanego trójkąta} .
Napisać w języku Pascal program (wykorzystując wyżej wymienione procedury), który wczytuje współrzędne trzech punktów, a następnie w przypadku, gdy nie mogą być wierzchołkami trójkąta sygnalizuje ten fakt odpowiednim komunikatem i kończy działanie. Przy danych poprawnych pozyskuje współrzędne badanego punktu, bada czy jest on punktem wewnętrznym, jeśli nie wysyła odpowiedni komunikat i kończy działanie, w przypadku punktu wewnętrznego oblicza i wyświetla pola trzech trójkątów na które podzielą zadany trójkąt odcinki łączące badany punkt z wierzchołkami trójkąta.

Uwaga: Wyniki liczbowe wyświetlić w postaci normalnej z dwiema cyframi po kropce i poprzedzić tekstami objaśniającymi. Do przechowywania wartości współrzędnych zadeklarować zmienne Ax, Ay, Bx, By, Cx, Cy, Px, Py, PoleAPB, PoleBPC, PoleAPC oraz w razie potrzeby dodatkowe, którym identyfikatory dobrać samodzielnie.


  1. Zakładamy, że wcześniej została już opracowana procedura o nagłówku:

RROCEDURE WyznaczObjPolePow

(pr, kat: Double; VAR PowB, PowC, Obj:Double);

która dla zadanych w parametrach pr, kat (dane opisują stożek) wartości promienia podstawy i kąta między tworzącą a podstawą (kąt w mierze łukowej) przekazuje w parametrach wynikowych PowB, PowC, Obj wartości pola powierzchni bocznej, całkowitej i objętość badanego stożka.

Opisać funkcję logiczną o nagłówku:



FUNCTION Stozek (VAR pr, kat: Double) :Boolean;

która w trybie konwersacyjnym pobierze z klawiatury długość promienia podstawy i miarę kąta między tworzącą z podstawą stożka (w radianach) i przekaże do punktu wywołania wartość TRUE w przypadku danych poprawnych i FALSE w przeciwnym razie.

Zakładamy, że w programie zadeklarowano zmienne o identyfikatorach: R, alfa, Pc,Pb,V do przechowywania informacji dotyczących stożka (promienia, kąta, pola powierzchni całkowitej, pola powierzchni bocznej, objętości). Napisać polecenia (wykorzystując wyżej wymienioną procedurę i funkcję) nakazujące pozyskanie informacji o stożku i wyświetlenie alternatywnie komunikatu o niemożliwości wykonania obliczeń, bądź wyznaczenie pól powierzchni i objętości i wyświetlenie wyników w postaci:

Powierzchnia boczna = +9.99E±999------Powierzcnia calkowita = = +9.99E±999

----------------------------Objetosc = = +9.9999E±999.


  1. Podać wynik działania sekwencji poleceń (wartość zmiennej nap):

nap:=’ Kowalski Artur / I rok informatyki’;

poz:=pos (‘/’, nap);

nap:= trim(copy(nap,1, poz-1)) + ‘ (‘ +

trimleft (copy(nap, poz+1,100)) + ‘)’;




  1. Podać wynik działania sekwencji instrukcji:

nap := ‘[34451]Zborowski *Jan’;

poz1 := pos(‘[‘,nap);

poz2 := pos(‘*’,nap);

writeLn (copy(nap,poz1+1,poz2-poz1-1) + ‘ ‘ +

copy(nap,poz2+1,11) + ‘ – ‘, copy(nap,2,poz2-2));


  1. Zakładamy, że zostały zdefiniowane typy:

_pracownicy = rekord

pesel: string[11];

nazw,imie: string[20];

StKierown:Boolean;

end;

Napisać procedurę o nagłówku:



procedure Rozpakuj (var nap:AnsiString;

var prac:_pracownicy);

która otrzymując w parametrze nap napis postaci (zakładamy poprawność napisu):

pesel/ nazwisko imię /stanowisko

(stanowisko kodowane znakowo - mała lub duża litera t lub n, zapisana bezpośrednio po znaku „/”, przed nazwiskiem, po nazwisku i po imieniu może wystąpić dowolna liczba znaków spacji), rozpakuje go i przekaże poszczególne informacje w parametrze prac.

Przykładowa wartość parametru nap: 60060934568/ Kowalski Adam /t


  1. Opisać procedurę, która otrzymując w parametrze Nap typu String informację o studencie postaci:

99999999/ nazwisko imię /wysokość stypendium


rozpakowuje napis i przekaże te informacje w parametrze RecStud typu rekordowego (4 pola: nazwisko, imię, numer indeksu, wysokość stypendium – typ zdefiniować samodzielnie).

Uwaga: Pierwsza informacja jest numerem indeksu, przed i po nazwisku oraz po imieniu może wystąpić dowolna liczba spacji





  1. Zakładamy, że zostały zdefiniowane następujące typy:

_CenyTow=RECORD

IdTow: String[6]; {identyfikator napisowy towaru}

Cena:Double;

Podatek:Byte {podatek procentowy}

END;

_PozycjeNaFakturze=RECORD



IdTow: String[6]; {identyfikator napisowy towaru}

IloscTow: Byte; {ilość zakupionego towaru}

Cena:Double;

Wartosc: Double; {wartosc towaru bez podatku}

Podatek: Double; {wartość podatku za towar}

DoZaplaty: Double

{wartość towaru bez podatku + podatek}

END;
Zakładamy ponadto, że w zmiennej towar typu _CenyTow zapisana jest informacja o zakupionym towarze, w zmiennej IleZakup ilość zakupionego towaru. Napisać sekwencję rozkazów, które na tej podstawie wypełnią pola w zmiennej PozFaktury typu _PozycjeNaFakturze.





  1. Niech będą zdefiniowane stałe i typy:

const

MaxDl = 100;



type

_ind = 1..MaxDl;



_WyrCg = array [_ind] of double;

Ciągi liczbowe postaci reprezentowane są jako para (LiczEl, WykazEl), gdzie LiczEl jest typu _ind i oznacza ilość wyrazów w ciągu (wypełnienie tablicy WykazEl), natomiast WykazEl jest typu _WyrCg i przechowuje kolejne wyrazy ciągu.
Napisać procedurę o nagłówku:

Procedure WyznaczCiag ({we} dl : _Ind; var a,b : _WyrCg;

{wy} var c : _WyrCg);



która mając dwa zadane ciągi i o długości dl, wyznacza ciąg zdefiniowany w następujący sposób: .


  1. Wektor w przestrzeni n-wymiarowej reprezentowany jest w parze (wymiar przestrzeni, tablica współrzędnych).

  1. Napisać funkcję, która otrzymując w parametrach: wymiar przestrzeni oraz w dwóch parametrach typu tablicowego współrzędne dwóch wektorów przekaże do punktu wywołania ich iloczyn skalarny,

Uwaga: Typy do reprezentacji wektorów zdefiniować samodzielnie.

  1. Napisać procedurę, która otrzymując w parametrach: wymiar przestrzeni, w dwóch parametrach typu tablicowego współrzędne dwóch wektorów oraz w dwóch parametrach typu rzeczywistego współczynniki kombinacji liniowej, wyznaczy i przekaże w parametrze typu tablicowego współrzędne kombinacji liniowej podanych wektorów..

Uwaga: Skorzystać z typów zdefiniowanych w poprzednim podpunkcie.

  1. Załóżmy, że w programie zostały zadeklarowane globalnie: stała MaxDlCg (maksymalna liczba elementów ciągu) oraz następujące typy do reprezentowania skończonego ciągu liczb całkowitych:


  1   2


©operacji.org 2017
wyślij wiadomość

    Strona główna