Kolokwium z PPR


Zestaw 1

UWAGA! W każdym zadaniu można pisać programy, które uwzględniają liczbę zestawów na początku, ale nie trzeba.

Zadanie 1 (5 pkt)

Napisz program obliczający sumę dwóch liczb całkowitych
Np.
Wejście:
3
4
Wyjście:
7

Zadanie 2 (8 pkt)

Napisz program znajdujący najmniejszą spośród danego ciągu liczbę.
Na wejściu znajduje się najpierw liczba liczb pojawiających się na wejściu (nie więcej niż 1000), a po niej odpowiednia liczba takich liczb oddzielonych spacją (każda nie większa niż 30.000, każda różna)
Na wyjściu program powinien wypisać najmniejszą z nich
Np.
Wejście:
4 56 23 21 22
Wyjście:
21

Zadanie 3 (5 pkt)

Napisz funkcję, która wyciąga z kolejki (ang. fifo) kolejne elementy. W tym celu uzupełnij poniższy kod (nie zmieniaj deklaracji zmiennych):
int kolejka[567];
int poczatek_kolejki, koniec_kolejki;

int z_kolejki();
{
//???
}

Zadanie 4 (7 pkt)

Poniższy program powinien przeczytane na wejściu litery wypisać na wyjściu jako posortowane w kolejności odwrotnej do alfabetycznej. Niestety znajduje się w nim kilka błądów - popraw je.
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>

//---------------------------------------------------------------------------

#pragma argsused

char t[10000];
int n,d,i,j,dl;
int c[256];

int main(int argc, char* argv[])
{
scanf("%d",&d);
for (i=0; i<d; i++)
{
scanf("%s",&t);
dl=strlen(t);
for (i=1; i<=dl; i++) c[t[i]]++;
for (i=255; i>=0; i--)
{
c[i] = 0;
for(j=0; j<c[i]; j++) printf("%c",i);
}
}
return 0;
}
Np:
Wejście
2
asddf
fkjpo
Wyjście:
sfdda
pokjf

Zadanie 5 (5 pkt)

Napisz, co robi funkcja qsort() zadeklarowana w bibliotece stdlib.h?

Zadanie 6 (10 pkt)

Napisz program, który sprawdza, czy podany na wejściu ciąg jest prawidłowo posortowany rosnąco.
W pierwszej linii wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. W zestawie znajduje się najpierw liczba liczb pojawiających się na wejściu (nie więcej niż 1000), a po niej odpowiednia liczba takich liczb (każda nie większa niż 30.000, każda różna)
Na wyjściu trzeba napisać TAK, jeśli ciąg na wejściu jest prawidłowo posortowany rosnąco, lub NIE jeśli nie jest posortowany.
Np1:
Wejście:
2
5 2 4 7 9 10
6 5 7 8 9 6 4
Wyjście:
TAK
NIE

Uzupełnij kod poniższego programu:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>

//---------------------------------------------------------------------------

#pragma argsused

int t[10000];
int n,d,i,q,qq;
int ok;

int main(int argc, char* argv[])
{
scanf("%d",&d);
while (d--)
{
scanf("%d",&n);
for (i=0; i<n; i++) scanf("%d",&t[i]);

// Tu dopisz brakujący kawałek kodu, który będzie sprawdzał, czy ciąg jest posortowany

if (ok) printf("TAK\n");
else printf("NIE\n");
}
return 0;
}

Zadanie 7 (10 pkt)

Koledzy Jasia mają inne hobby - chcą nazbierać jak najwięcej monet różnego rodzaju. W Bajtocji, gdzie mieszka Jaś, wszystkie nominały do 10.000 włącznie są monetami, a do każdego nominału przyporządkowana jest inna moneta. Grześ i Krzyś mają swoje kolekcje monet - po jednej z każdego rodzaju, które udało im się nazbierać. Aby swoje kolekcje powiększyć postanowili je połączyć. Po tym połączeniu mają nadzieję mieć więcej monet w swojej, teraz już wspólnej, kolekcji. Dodatkowo zyskali jeszcze monety, które się powtarzały - postanowili oni nie trzymać w kolekcji powtarzających się nominałów, a powtarzające się monety przeznaczyli na kupienie sobie lodów, które obaj bardzo lubią.
Napisz program, który na podstawie wiedzy o tym jak wyglądały kolekcje Grzesia i Krzysia przed połączeniem odpowie na pytanie, jak będzie wyglądał zestaw monet, które będą mogli przeznaczyć na lody.
Wejście: W pierwszym wierszu wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. Zestaw danych składa się z dwóch linii oznaczających odpowiednio kolekcję Grzesia i Krzysia. Każda kolekcja opisana jest przy pomocy wpierw jednej liczby oznaczającej liczbę monet w kolekcji, a następnie w kolejności od najmniejszej do największej, liczbę monet, które znajdują się w danej kolekcji. W każdej kolekcji jest co najwyżej 10.000 monet i oczywiście nie powtarzają się one. Każda moneta ma nominał od 1 do 10.000.
Wyjście: Na wyjściu dla każdego zestawu trzeba wypisać w taki sam sposób, w jaki podane są na wejściu kolekcje, zestaw monet przeznaczonych przez Grzesia i Krzysia na lody. Tzn. na początku powinna znajdować się informacja o tym, ile monet nie znalazło miejsca w ich wspólnej kolekcji, a następnie powinny być wypisane nominały monet, które się na tą resztę składają, w kolejności uporządkowanej od najmniejszej do największej
Np.
Wejście:
3
3 4 8 10
5 4 8 9 10 23
8 1 2 3 4 5 6 7 8
5 8 9 10 11 12
0
3 8 23 123
Wyjście:
3 4 8 10
1 8
0

Zadanie 8* (5 pkt)

Napisz sortowanie alfabetyczne wyrazów pojawiających się na wejściu.
Wejście: W pierwszej linii wejścia znajduje się jedna liczba całkowita, oznaczająca liczbę zestawów danych, które za chwilę pojawią się na wejściu. Każdy zestaw składa się na początku z jednej linii zawierającej jedną liczbę naturalną X oznaczającą liczbę wyrazów, które za chwilę pojawią się na wejściu (1 <= X <= 10000). Po niej znajduje się X linii, a w każdej z nich jeden wyraz (bez spacji, o maksymalnej długości 255 znaków). Wszystkie wyrazy składają się tylko i wyłącznie z małych liter alfabetu łacińskiego.
Wyjście: Na wyjściu każdy zestaw powinien odpowiadać X liniom. Linie te powinny zawierać wyrazy z wejścia podane w kolejności alfabetycznej.
Np.
Wejście:
1
8
hiena
ewangelia
garnek
cytryna
domek
fanaberia
alabaster
broszura
Wyjście:
alabaster
broszura
cytryna
domek
ewangelia
fanaberia
garnek
hiena