SHARE
TWEET

Untitled

a guest Jul 17th, 2017 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program Kolokwium1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {Program jest jeszcze niedokonczony, ale wszystkie procedury dzialaja, za wyjatkiem procedury wyswietlajacej obraz,
  6. ktora wyswietla tylko jeden obraz zamiast wszystkich. Pozniej poprawie, teraz mi sie nie chce.}
  7.  
  8. {Pozmieniajcie co sie da i usuncie komentarze jezeli checie oddawac to na kolokwium,
  9. zeby sie nie okazalo ze oddamy wszyscy to samo.
  10. Sprawdze tez jak u was wyglada losowanie liczb, bo u mnie cos czesto losuje te same. -- Dudek}
  11.  
  12. uses
  13.   SysUtils;
  14.  
  15. type
  16.    Type_ListaObrazow = record
  17.      Obraz    : array of array of char;
  18. end;
  19.  
  20. type TListaArray = array of Type_ListaObrazow;
  21.  
  22.  
  23. Procedure WyswietlObrazy(var ListaObrazow : TListaArray);    {pierwszy parametr przekazywany jest poprzez referencje}
  24. var i ,j, k   : integer;
  25.     rozmiary     : array [0..1] of integer;  {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
  26. Begin
  27.   writeln('Lista obrazow: ');
  28.   for i:=1 to length(ListaObrazow) do     {petla przejdzie przez wszystkie obrazy}
  29.   Begin
  30.     rozmiary[0] := length(ListaObrazow[i].Obraz);   {zczytaj pierwszy rozmiar obrazu}
  31.     rozmiary[1] := length(ListaObrazow[i].Obraz[0]);  {zczytaj drugi rozmiar obrazu}
  32.     for j:=0 to rozmiary[0]-1 do  {wyswietl obraz}
  33.     Begin
  34.       for k:=0 to rozmiary[1]-1 do
  35.       Begin
  36.         write(ListaObrazow[i].Obraz[j][k]);
  37.       End;
  38.       writeln;
  39.     End;
  40.   End;
  41. End;
  42.  
  43.  
  44. Procedure DodajObrazPodpunktA(var ListaObrazow : TListaArray);   {parametr przekazywany jest poprzez referencje}
  45. var tempvar  : string;
  46.     error, iloscobrazow, i ,j, losowykolor    : integer;
  47.     rozmiary  : array [0..1] of integer;  {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
  48.     litera    : char;   {zmienna przechowujaca wylosowana litere, aby zmniejszyc ilosc instrukcji warunkowych}
  49. Begin
  50.   iloscobrazow := length(ListaObrazow)+1;
  51.   write('Podaj rozmiary obrazu: ');
  52.   readln(tempvar);                                {uzytkownik podaje rozmiary oddzielone spacja}
  53.   val(tempvar, rozmiary[0], error);
  54.   delete(tempvar, 1, pos(' ', tempvar));
  55.   val(tempvar, rozmiary[1], error);
  56.  
  57.   setlength(ListaObrazow, iloscobrazow);
  58.   setlength(ListaObrazow[iloscobrazow].Obraz, rozmiary[0], rozmiary[1]);
  59.  
  60.   for i:=0 to rozmiary[0]-1 do  {wypelnij obraz}
  61.   Begin
  62.     losowykolor := random(3);     {losujemy cyfre od 0 do 2 i zapisujemy przypadajacy jej kolor w zmiennej}
  63.     if losowykolor = 0 then
  64.       litera := 'R'
  65.     else if losowykolor = 1 then
  66.       litera := 'G'
  67.     else
  68.       litera := 'B';
  69.     for j:=0 to rozmiary[1]-1 do
  70.     Begin
  71.       ListaObrazow[iloscobrazow].Obraz[i][j] := litera;
  72.     End;
  73.   End;
  74. End;
  75.  
  76.  
  77. Procedure DodajObrazPodpunktB(var ListaObrazow : TListaArray);     {parametr przekazywany jest poprzez referencje}
  78. var tempvar  : string;
  79.     error, iloscobrazow, i ,j    : integer;
  80.     rozmiary : array [0..1] of integer;  {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
  81.     losowe_x_y : array [0..1] of integer;  {tablica dwuelementowa, przechowujaca losowe wspolrzedne}
  82. Begin
  83.   iloscobrazow := length(ListaObrazow)+1;     {wczytaj ilosc obrazow i zwieksz ja o 1}
  84.   write('Podaj rozmiary obrazu: ');
  85.   readln(tempvar);                                {uzytkownik podaje rozmiary oddzielone spacja}
  86.   val(tempvar, rozmiary[0], error);
  87.   delete(tempvar, 1, pos(' ', tempvar));
  88.   val(tempvar, rozmiary[1], error);
  89.  
  90.   setlength(ListaObrazow, iloscobrazow);          {ustaw rozmiar tablicy na o 1 wieksza}
  91.   setlength(ListaObrazow[iloscobrazow].Obraz, rozmiary[0], rozmiary[1]);   {ustaw rozmiar tablicy przechowujacej obraz obrazu}
  92.  
  93.   while True do
  94.   Begin
  95.     write('Podaj kolory: ');                      {uzytkownik podaje dwa kolory (R G lub B, najpierw kolor tla a pozniej punktow) nieoddzielone spacja}
  96.     readln(tempvar);
  97.     if ((length(tempvar) <> 2) OR ((tempvar[1] <> 'R') AND (tempvar[1] <> 'G') AND      {Sprawdz, czy kolory sa podane poprawnie}
  98.     (tempvar[1] <> 'B')) OR ((tempvar[2] <> 'R') AND (tempvar[2] <> 'G') AND
  99.     (tempvar[2] <> 'B'))) then
  100.       writeln('Niepoprawne kolory!')
  101.     else
  102.       break;
  103.   End;
  104.  
  105.   for i:=0 to rozmiary[0]-1 do  {wypelnij obraz}
  106.   Begin
  107.     for j:=0 to rozmiary[1]-1 do
  108.     Begin
  109.       ListaObrazow[iloscobrazow].Obraz[i][j] := tempvar[1];
  110.     End;
  111.   End;
  112.  
  113.   randomize;
  114.   i:=0;
  115.   while i<5 do   {zamien 5 losowych znakow}
  116.   Begin
  117.     losowe_x_y[0] := random(rozmiary[0]);        {wylosuj pierwsza wspolrzedna}
  118.     losowe_x_y[1] := random(rozmiary[1]);        {wylosuj druga wspolrzedna}
  119.     if(ListaObrazow[iloscobrazow].Obraz[losowe_x_y[0]][losowe_x_y[1]] <> tempvar[2]) then     {sprawdz czy kolor nie jest juz zamieniony}
  120.     Begin
  121.       ListaObrazow[iloscobrazow].Obraz[losowe_x_y[0]][losowe_x_y[1]] := tempvar[2];
  122.       i := i + 1;
  123.     End;
  124.   End;
  125. End;
  126.  
  127.  
  128.  
  129. Procedure Permutuj(var ListaObrazow : TListaArray);     {parametr przekazywany jest poprzez referencje}
  130. var i ,j, index    : integer;
  131.     rozmiary : array [0..1] of integer;  {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
  132. Begin
  133.  
  134.   While True do
  135.   Begin
  136.     write('Ktory obraz permutowac: ');
  137.     read(index);
  138.     if index <= length(ListaObrazow) then
  139.       break
  140.     else
  141.       writeln('Nie ma takiego obrazu!');
  142.   End;
  143.  
  144.   rozmiary[0] := length(ListaObrazow[index].Obraz);   {zczytaj pierwszy rozmiar obrazu}
  145.   rozmiary[1] := length(ListaObrazow[index].Obraz[0]);  {zczytaj drugi rozmiar obrazu}
  146.  
  147.   for i:=0 to rozmiary[0]-1 do  {wyswietl obraz}
  148.   Begin
  149.     if ListaObrazow[index].Obraz[i][0] = 'R' then       {korzystam z trzech instrukcji warunkowych w pierwszej petli, zamiast jednej instrukcji warunkowej w drugiej petli aby zaoszczedzic na zuzyciu procesora}
  150.     Begin
  151.       for j:=0 to rozmiary[1]-1 do
  152.       Begin
  153.         ListaObrazow[index].Obraz[i][j] := 'B';   {zamien R na B}
  154.       End;
  155.     End
  156.     else if ListaObrazow[index].Obraz[i][0] = 'G' then
  157.     Begin
  158.       for j:=0 to rozmiary[1]-1 do
  159.       Begin
  160.         ListaObrazow[index].Obraz[i][j] := 'R';     {zamien G na R}
  161.       End;
  162.     End
  163.     else
  164.     Begin
  165.       for j:=0 to rozmiary[1]-1 do
  166.       Begin
  167.         ListaObrazow[index].Obraz[i][j] := 'G';    {zamien B na G}
  168.       End;
  169.     End;
  170.   End;
  171. End;
  172.  
  173.  
  174. Procedure ZapiszDoPliku(var ListaObrazow : TListaArray);     {parametr przekazywany jest poprzez referencje}
  175. var i ,j, iloscobrazow    : integer;
  176.     rozmiary : array [0..1] of integer;  {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
  177.     plik  : text;
  178. Begin
  179.   iloscobrazow := length(ListaObrazow)+1;     {wczytaj ilosc obrazow}
  180.   rozmiary[0] := length(ListaObrazow[iloscobrazow].Obraz);   {zczytaj pierwszy rozmiar obrazu}
  181.   rozmiary[1] := length(ListaObrazow[iloscobrazow].Obraz[0]);  {zczytaj drugi rozmiar obrazu}
  182.  
  183.   assign(plik, 'obraz.txt');
  184.   rewrite(plik);
  185.  
  186.   for i:=0 to rozmiary[0]-1 do  {wyswietl obraz}
  187.   Begin
  188.     for j:=0 to rozmiary[1]-1 do
  189.     Begin
  190.       write(plik, ListaObrazow[iloscobrazow].Obraz[i][j]);
  191.     End;
  192.     writeln(plik);
  193.   End;
  194.   close(plik);
  195. End;
  196.  
  197. var ListaObrazow : TListaArray;
  198.  
  199. begin
  200.   DodajObrazPodpunktA(ListaObrazow);
  201.   WyswietlObrazy(ListaObrazow);
  202.   DodajObrazPodpunktB(ListaObrazow);
  203.   WyswietlObrazy(ListaObrazow);
  204.   Permutuj(ListaObrazow);
  205.   WyswietlObrazy(ListaObrazow);
  206.   readln;
  207. end.
RAW Paste Data
Top