Ćwiczenia do Modułu 1: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Daria (dyskusja | edycje)
Koszty i wskazowki
Daria (dyskusja | edycje)
Koszty i wskazowki
Linia 63: Linia 63:
     '''if''' Kol(c)=czerwony '''then''' c:=c+1
     '''if''' Kol(c)=czerwony '''then''' c:=c+1
     '''else''' '''begin'''
     '''else''' '''begin'''
       '''while''' Kol(b)=biały '''and''' (c<b) '''do''' b:=b-1;
       '''while''' Kol(b)=biały '''and''' (c<b) '''do''' b:=b-1; //pętla po bialych od konca tablicy
       '''if''' b<c '''then''' '''begin'''
       '''if''' c<b '''then''' '''begin'''
         Z(c,b);
         Z(c,b);
         b:=b-1;
         b:=b-1;
Linia 175: Linia 175:
'''Rozwiązanie 1'''  
'''Rozwiązanie 1'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''program''' FlagaHolenderska(N,A);
  '''program''' FlagaTrojkolorow(N,A);
  '''var''' m,r,w,pom : integer;
  '''var''' m,r,w,pom : integer;
  '''begin'''
  '''begin'''
Linia 200: Linia 200:
'''Rozwiązanie 2'''  
'''Rozwiązanie 2'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''program''' FlagaHolenderska(N,A);
  '''program''' FlagaTrojkolorowa(N,A);
  '''var''' m,r,w,pom : integer;
  '''var''' m,r,w,pom : integer;
  '''begin'''
  '''begin'''
Linia 208: Linia 208:
     '''else'''  
     '''else'''  
       '''if''' A[w]=0 '''then''' '''begin'''
       '''if''' A[w]=0 '''then''' '''begin'''
         pom:=A[r]; A[r]:=A[w]; A[w]:=pom; //zamieniam wartosci w A[r] i A[w], /po zamianie A[r]=0, A[w] >0  
         pom:=A[r]; A[r]:=A[w]; A[w]:=pom; //zamieniam wartosci w A[r] i A[w], po zamianie A[r]=0, A[w] >0  
         w:=w+1; //wiec zwiekszam oba indeksy r i w
         w:=w+1; //wiec zwiekszam oba indeksy r i w
         r:=r+1;
         r:=r+1;
Linia 226: Linia 226:


== Zadanie 3 (Najdłuższe plateau) ==
== Zadanie 3 (Najdłuższe plateau) ==
Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 1,  długość
Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 1,  długość najdłuższego stałego segmentu (spójnego fragmentu tablicy).
najdłuższego stałego segmentu (spójnego fragmentu tablicy).


<div class="mw-collapsible mw-made=collapsible mw-collapsed">
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
Linia 279: Linia 278:
'''Rozwiązanie 1'''  
'''Rozwiązanie 1'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''program''' NajdluzszePlateau2(N,A);
  '''program''' SegmentOMaksymalnejSumie1(N,A);
  '''var''' p,k,suma, maks: integer;
  '''var''' p,k,suma, maks: integer;
  '''begin'''
  '''begin'''
Linia 300: Linia 299:
'''Rozwiązanie 2'''  
'''Rozwiązanie 2'''  
<div class="mw-collapsible-content" style="display:none">
<div class="mw-collapsible-content" style="display:none">
  '''program''' NajdluzszePlateau2(N,A);
  '''program''' SegmentOMaksymalnejSumie2(N,A);
  '''var''' i,biez,maks: integer;
  '''var''' i,biez,maks: integer;
  '''begin'''
  '''begin'''

Wersja z 07:47, 17 lip 2006

Ta strona zawiera podstawowe zadania na tablice.

Ogladaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__


Zadanie 1 (Flaga polska)

Tablica A typu array[1..N] of integer (N > 0) wypełniona zerami i jedynkami reprezentuje ciąg N urn w których znajdują się żetony białe (0) i czerwone (1). Podaj algorytm działania automatu przestawiającego żetony w urnach tak, by najpierw były żetony czerwone, potem białe. Robot może wykonywać dwa rodzaje operacji:

  • Kol(i) - podaje kolor żetonu w i-tej urnie (1 ≤ i ≤ n)
  • Z(i,j) - zamienia żetony z i-tej i j-tej urny (1 ≤ i,j ≤ n)

Uwagi:

  1. Operacja Kol jest bardzo kosztowna, więc zależy nam na tym by kolor każdego żetonu był sprawdzany co najwyżej raz.
  2. Robot potrafi zapamiętać tylko kilka wartości z przedziału 0..N+1.
  3. Nie można założyć, że występuje choć jeden żeton w każdym z kolorów.

Wskazówka 1

Rozwiązanie 1

Wskazówka 2

Rozwiązanie 2

Wskazówka 3

Rozwiązanie 3

Wskazówka 4

Rozwiązanie 4

Pytanko 1

Pytanko 2


Zadanie 2 (Flaga trójkolorowa)

Dana jest tablica A typu array[1..N] of integer (N > 0). Należy tak poprzestawiać w niej elementy, żeby najpierw były elementy ujemne, potem równe zero, a na końcu dodatnie.

Wskazówka 1

Rozwiązanie 1

Rozwiązanie 2

Zadanie 3 (Najdłuższe plateau)

Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 1, długość najdłuższego stałego segmentu (spójnego fragmentu tablicy).

Rozwiązanie 1

Rozwiązanie 2

Zadanie 4 (Segment o maksymalnej sumie)

Napisz program znajdujący w zadanej tablicy A typu array[1..N] of integer, N > 1, maksymalną sumę segmentu (spójnego fragmentu tablicy). Przyjmujemy, że segment pusty ma sumę 0.

Wskazówka 1

Rozwiązanie 1

Wskazówka 2

Rozwiązanie 2

Zadanie 5 (Część wspólna zbiorów)

Dane są dwie tablice A i B typu array[1..N] of integer, N > 1. Obie są posortowane rosnąco. Należy traktując A i B jako reprezentacje dwu zbiorów wypisać (operacją write) cześć wspólną tych zbiorów.

Rozwiązanie 1

Zadanie 6 (Suma zbiorów)

Dane są dwie tablice A i B typu array[1..N] of integer, N > 1. Obie są posortowane rosnąco. Należy traktując A i B jako reprezentacje dwu zbiorów wypisać (operacją write) sumę tych zbiorów.

Rozwiązanie 1

Rozwiązanie 2

Zadanie 7 (Podciąg)

Dane są dwie tablice A typu array[1..N] of integer i B typu array[1..M] of integer, N, M > 1. Napisz program sprawdzający, czy A jest podciągiem B (tzn. czy istnieje funkcja f, rosnąca, z 1..N w 1..M, t. ze A[i]=B[f(i)]).

Rozwiązanie 1

Zadanie 8 (Odwracanie tablicy)

Dana tablica A typu array[0..N-1] of integer, N > 1. Napisz program odwracający kolejność elementów w A.

Rozwiązanie 1

Zadanie 9 (Przesunięcie cykliczne)

Dana tablica A typu array[0..N-1] of integer, N > 1, i liczba naturalna k > 1. Napisz program realizujący przesunięcie cykliczne w prawo o k pól, czyli przesuwający zawartość pola A[i] na A[(i+k) mod N] dla każdego i < N.

Wskazówka 1

Rozwiązanie 1

Wskazówka 2

Rozwiązanie 2

Wskazówka 3

Rozwiązanie 3

Zadanie 10 (Następna permutacja)

Tablica A typu array[1..N] of integer zawiera pewną permutację liczb 1.. N. Napisz program wpisujący do A następną leksykograficznie permutację. Zakładamy, że permutacja w A nie jest ostatnia leksykograficznie.

Rozwiązanie 1

Zadanie 11 (Segment o zadanej sumie)

Tablica A typu array[1..N] of integer zawiera tylko liczby dodatnie. Napisz program który dla danego W typu integer sprawdza czy w A istnieje segment o sumie W (czyli czy istnieją p, k takie, że W=A[p]+...+A[k1]).

Rozwiązanie 1

Zadanie 12 (Głosowanie większościowe)

Dana jest tablica A typu array[1..N] of integer, N > 1. Należy sprawdzić czy jest w niej element wystepujący więcej niż N/2 razy i jeśli tak wskazać go.

Wskazówka 1

Rozwiązanie 1

Wskazówka 2

Rozwiązanie 2

Zadanie 13 (Arytmetyka liczb wielocyfrowych)

Liczby wielocyfrowe będą reprezentowane w tablicach typu liczba=array[0..N-1] of integer w taki sposób, że najmniej znacząca cyfra jest pod indeksem 0. Rozpatrujemy liczby przy podstawie b ≥ 1. Napisz procedury obliczające:

  • sumę liczb A i B do C. Jeśli wynik nie zmieści się w C to wartość C nie ma znaczenia. Zmienna przepełnienie wskazuje czy do niego doszło czy nie.
  • różnicę A i B do C. Jeśli wynik miałby byc liczbą ujemną to wartość C nie ma znaczenia. Zmienna ujemny wskazuje jaki jest znak wyniku.
  • iloczyn A i B do C (C powinno być tablicą dwa razy dłuższą niż A i B, żeby móc pomieścić wynik).

Rozwiązanie 1