Kolokwium z PPR


Zestaw 2

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 iloczyn dwóch liczb całkowitych
Np.
Wejście:
3
4
Wyjście:
12

Zadanie 2 (8 pkt)

Napisz program znajdujący indeks najmniejszej spośród danego ciągu liczby.
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 (każda nie większa niż 30.000, każda różna)
Na wyjściu program powinien wypisać jako która z nich pojawiła się ta najmniejsza
Np.
Wejście:
4 56 23 21 22
Wyjście:
3

Zadanie 3 (5 pkt)

Napisz funkcję, która wkłada do 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;

void do_kolejki(int x);
{
//???
}

Zadanie 4 (7 pkt)

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

#pragma hdrstop
#include <stdio.h>

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

#pragma argsused

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

int main(int argc, char* argv[])
{
scanf("%d",&d);
for (i=0; i<d; i++)
{
scanf("%d",&n);
for (i=0; i<n; i++) scanf("%c",&t[i]);
for (i=1; i<=n; i++) c[t[i]]++;
for (i=10000; i>=0; i--)
{
c[i] = 0;
for(j=0; j<c[i]; j++) printf("%d ",i);
}
printf("\n");
}
return 0;
}
Np:
Wejście
2
6 789 378 327 31 1 23
3 1 2 3
Wyjście:
789 378 327 31 23 1
3 2 1

Zadanie 5 (5 pkt)

Napisz, co robi funkcja strdup() zadeklarowana w bibliotece string.h?

Zadanie 6 (10 pkt)

Napisz program, który sprawdza, czy podany na wejściu ciąg jest prawidłowo posortowany maleją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 malejąco, lub NIE jeśli nie jest posortowany.
Np1:
Wejście:
2
5 10 8 7 3 2
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ła ich wspólna kolekcja po połączeniu
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, wspólną kolekcję Grzesia i Krzysia. Tzn. na początku powinna znajdować się informacja o tym, ile monet znajduje się w ich wspólnej kolekcji, a następnie powinny być wypisane nominały monet, które na tą kolekcję się składają, w kolejności uporządkowanej od najmniejszej do największej
Np.
Wejście:
3
3 4 7 9
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:
6 4 7 8 9 10 23
12 1 2 3 4 5 6 7 8 9 10 11 12
3 8 23 123

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