graphlogo

Wydział Matematyki i Informatyki

Uniwersytetu Mikołaja Kopernika w Toruniu

1inf 2023/24 - Podstawy algorytmiki i programowania, LC*

[K1] Sortowanie bez pętli
Języki: c cpp java pas
Limit czasu: 3.0 s
Limit pamięci: 0 MB
Limit rozmiaru rozwiązania: 60 kB
Tło

Problem sortowania zajmuje ważne miejsce w dziedzinie informatyki. Analizowania i realizacji różnych algorytmów sortowania stanowi ważną część edukacji większości informatyków, a samo sortowanie w różnych wariantach pochłania znaczny procent światowych zasobów obliczeniowych. Wykorzystywane algorytmy sortowania pochodzą z zakresu od popularnego sortowania bąbelkowego, przez sortowanie szybkie i równoległe do sieci sortujących. W tym zadaniu problemem będzie napisanie programu, który utworzy program sortujący (meta-sorter).


Problem

Zadaniem jest stworzenie programu, który produkuje kody programów (w języku Pascal) sortujących n liczb. Kody programów w Pascalu generowane przez Twoje rozwiązanie muszą posiadać następujące właściwości:
• Muszą rozpocząć się wierszem program sort(input,output);
• Muszą zadeklarować przechowywanie dokładnie n zmiennych całkowitych. Nazwami zmiennych musi być n początkowych liter alfabetu (np. dla n=6 będą to a, b , c, d, e, f).
• Pojedynczy readln musi czytać wartości dla wszystkich zmiennych całkowitych.
• Poza tym, w programie powinny pojawić się tylko operacje writeln oraz instrukcje if then else. Wyrażenia logiczne w instrukcjach warunkowych if muszą składać się z jednej ścisłej nierówności (< lub >) oraz dwóch nazw zmiennych. W wygenerowanym kodzie musi się pojawić dokładnie n! operacji writeln.
• W kodzie muszą pojawić się dokładnie trzy średniki
o po nagłówku programu : Program program sort(input,output);
o po deklaracji zmiennych : ... : Integer ;
o po operacji readln : readln ( ... ) ;
• Należy unikać zbędnego porównywania wartości zmiennych. Na przykład, gdy w czasie wykonywania programu zostanie ustalone, że a<b, zmienne a i b nie powinny być ponownie porównywane.
• Każda operacja writeln musi pojawić się w wierszu samodzielnie.
• Wygenerowany kod programu musi dać się skompilować. Wykonanie skompilowanego programu z podaniem dowolnego ciągu n liczb na wejściu powinno spowodować, że wartości wejściowe zostaną wydrukowane w porządku niemalejącym.
Dla tych, którzy nie znają składni Pascala, przykład pod koniec tego zadania całkowicie definiuje niewielki podzbiór niezbędnej w tym zadaniu składni.


Wejście i wyjście

Wejście składa się z liczby M kodów programów zapisanej w pierwszym wierszu po którym następuje wiersz pusty. Następnie pojawia się M przypadków, zawierających po jednej liczbie całkowitej 1 ≤ n ≤ 8. Między wierszami opisującymi testy mogą znajdować się puste wiersze.
Wyjściem jest M kodów programów napisanych w języku Pascal, które spełniają kryteria określone powyżej. Wydrukuj pusty wiersz pomiędzy dwoma kolejnymi programami.

Przykładowe wejście
1

3

Przykładowe wyjście
program sort(input,output);
var
a,b,c : integer;
begin
  readln(a,b,c);
  if a < b then
    if b < c then
      writeln(a,b,c)
    else if a < c then
      writeln(a,c,b)
    else
      writeln(c,a,b)
  else
    if a < c then
      writeln(b,a,c)
    else if b < c then
      writeln(b,c,a)
    else
      writeln(c,b,a)
end.

Zadanie pochodzi z http://uva.onlinejudge.org
Powrót
© 2009-2020 • ZawodyWeb Team
IKS - Inwestycja w Kierunki Strategiczne na Wydziale Matematyki i Informatyki UMK

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego