Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Kolokwium1;
- {$APPTYPE CONSOLE}
- {Program jest jeszcze niedokonczony, ale wszystkie procedury dzialaja, za wyjatkiem procedury wyswietlajacej obraz,
- ktora wyswietla tylko jeden obraz zamiast wszystkich. Pozniej poprawie, teraz mi sie nie chce.}
- {Pozmieniajcie co sie da i usuncie komentarze jezeli checie oddawac to na kolokwium,
- zeby sie nie okazalo ze oddamy wszyscy to samo.
- Sprawdze tez jak u was wyglada losowanie liczb, bo u mnie cos czesto losuje te same. -- Dudek}
- uses
- SysUtils;
- type
- Type_ListaObrazow = record
- Obraz : array of array of char;
- end;
- type TListaArray = array of Type_ListaObrazow;
- Procedure WyswietlObrazy(var ListaObrazow : TListaArray); {pierwszy parametr przekazywany jest poprzez referencje}
- var i ,j, k : integer;
- rozmiary : array [0..1] of integer; {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
- Begin
- writeln('Lista obrazow: ');
- for i:=1 to length(ListaObrazow) do {petla przejdzie przez wszystkie obrazy}
- Begin
- rozmiary[0] := length(ListaObrazow[i].Obraz); {zczytaj pierwszy rozmiar obrazu}
- rozmiary[1] := length(ListaObrazow[i].Obraz[0]); {zczytaj drugi rozmiar obrazu}
- for j:=0 to rozmiary[0]-1 do {wyswietl obraz}
- Begin
- for k:=0 to rozmiary[1]-1 do
- Begin
- write(ListaObrazow[i].Obraz[j][k]);
- End;
- writeln;
- End;
- End;
- End;
- Procedure DodajObrazPodpunktA(var ListaObrazow : TListaArray); {parametr przekazywany jest poprzez referencje}
- var tempvar : string;
- error, iloscobrazow, i ,j, losowykolor : integer;
- rozmiary : array [0..1] of integer; {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
- litera : char; {zmienna przechowujaca wylosowana litere, aby zmniejszyc ilosc instrukcji warunkowych}
- Begin
- iloscobrazow := length(ListaObrazow)+1;
- write('Podaj rozmiary obrazu: ');
- readln(tempvar); {uzytkownik podaje rozmiary oddzielone spacja}
- val(tempvar, rozmiary[0], error);
- delete(tempvar, 1, pos(' ', tempvar));
- val(tempvar, rozmiary[1], error);
- setlength(ListaObrazow, iloscobrazow);
- setlength(ListaObrazow[iloscobrazow].Obraz, rozmiary[0], rozmiary[1]);
- for i:=0 to rozmiary[0]-1 do {wypelnij obraz}
- Begin
- losowykolor := random(3); {losujemy cyfre od 0 do 2 i zapisujemy przypadajacy jej kolor w zmiennej}
- if losowykolor = 0 then
- litera := 'R'
- else if losowykolor = 1 then
- litera := 'G'
- else
- litera := 'B';
- for j:=0 to rozmiary[1]-1 do
- Begin
- ListaObrazow[iloscobrazow].Obraz[i][j] := litera;
- End;
- End;
- End;
- Procedure DodajObrazPodpunktB(var ListaObrazow : TListaArray); {parametr przekazywany jest poprzez referencje}
- var tempvar : string;
- error, iloscobrazow, i ,j : integer;
- rozmiary : array [0..1] of integer; {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
- losowe_x_y : array [0..1] of integer; {tablica dwuelementowa, przechowujaca losowe wspolrzedne}
- Begin
- iloscobrazow := length(ListaObrazow)+1; {wczytaj ilosc obrazow i zwieksz ja o 1}
- write('Podaj rozmiary obrazu: ');
- readln(tempvar); {uzytkownik podaje rozmiary oddzielone spacja}
- val(tempvar, rozmiary[0], error);
- delete(tempvar, 1, pos(' ', tempvar));
- val(tempvar, rozmiary[1], error);
- setlength(ListaObrazow, iloscobrazow); {ustaw rozmiar tablicy na o 1 wieksza}
- setlength(ListaObrazow[iloscobrazow].Obraz, rozmiary[0], rozmiary[1]); {ustaw rozmiar tablicy przechowujacej obraz obrazu}
- while True do
- Begin
- write('Podaj kolory: '); {uzytkownik podaje dwa kolory (R G lub B, najpierw kolor tla a pozniej punktow) nieoddzielone spacja}
- readln(tempvar);
- if ((length(tempvar) <> 2) OR ((tempvar[1] <> 'R') AND (tempvar[1] <> 'G') AND {Sprawdz, czy kolory sa podane poprawnie}
- (tempvar[1] <> 'B')) OR ((tempvar[2] <> 'R') AND (tempvar[2] <> 'G') AND
- (tempvar[2] <> 'B'))) then
- writeln('Niepoprawne kolory!')
- else
- break;
- End;
- for i:=0 to rozmiary[0]-1 do {wypelnij obraz}
- Begin
- for j:=0 to rozmiary[1]-1 do
- Begin
- ListaObrazow[iloscobrazow].Obraz[i][j] := tempvar[1];
- End;
- End;
- randomize;
- i:=0;
- while i<5 do {zamien 5 losowych znakow}
- Begin
- losowe_x_y[0] := random(rozmiary[0]); {wylosuj pierwsza wspolrzedna}
- losowe_x_y[1] := random(rozmiary[1]); {wylosuj druga wspolrzedna}
- if(ListaObrazow[iloscobrazow].Obraz[losowe_x_y[0]][losowe_x_y[1]] <> tempvar[2]) then {sprawdz czy kolor nie jest juz zamieniony}
- Begin
- ListaObrazow[iloscobrazow].Obraz[losowe_x_y[0]][losowe_x_y[1]] := tempvar[2];
- i := i + 1;
- End;
- End;
- End;
- Procedure Permutuj(var ListaObrazow : TListaArray); {parametr przekazywany jest poprzez referencje}
- var i ,j, index : integer;
- rozmiary : array [0..1] of integer; {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
- Begin
- While True do
- Begin
- write('Ktory obraz permutowac: ');
- read(index);
- if index <= length(ListaObrazow) then
- break
- else
- writeln('Nie ma takiego obrazu!');
- End;
- rozmiary[0] := length(ListaObrazow[index].Obraz); {zczytaj pierwszy rozmiar obrazu}
- rozmiary[1] := length(ListaObrazow[index].Obraz[0]); {zczytaj drugi rozmiar obrazu}
- for i:=0 to rozmiary[0]-1 do {wyswietl obraz}
- Begin
- 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}
- Begin
- for j:=0 to rozmiary[1]-1 do
- Begin
- ListaObrazow[index].Obraz[i][j] := 'B'; {zamien R na B}
- End;
- End
- else if ListaObrazow[index].Obraz[i][0] = 'G' then
- Begin
- for j:=0 to rozmiary[1]-1 do
- Begin
- ListaObrazow[index].Obraz[i][j] := 'R'; {zamien G na R}
- End;
- End
- else
- Begin
- for j:=0 to rozmiary[1]-1 do
- Begin
- ListaObrazow[index].Obraz[i][j] := 'G'; {zamien B na G}
- End;
- End;
- End;
- End;
- Procedure ZapiszDoPliku(var ListaObrazow : TListaArray); {parametr przekazywany jest poprzez referencje}
- var i ,j, iloscobrazow : integer;
- rozmiary : array [0..1] of integer; {pierwszy element tablicy to rozmair X a drugi to rozmiar Y}
- plik : text;
- Begin
- iloscobrazow := length(ListaObrazow)+1; {wczytaj ilosc obrazow}
- rozmiary[0] := length(ListaObrazow[iloscobrazow].Obraz); {zczytaj pierwszy rozmiar obrazu}
- rozmiary[1] := length(ListaObrazow[iloscobrazow].Obraz[0]); {zczytaj drugi rozmiar obrazu}
- assign(plik, 'obraz.txt');
- rewrite(plik);
- for i:=0 to rozmiary[0]-1 do {wyswietl obraz}
- Begin
- for j:=0 to rozmiary[1]-1 do
- Begin
- write(plik, ListaObrazow[iloscobrazow].Obraz[i][j]);
- End;
- writeln(plik);
- End;
- close(plik);
- End;
- var ListaObrazow : TListaArray;
- begin
- DodajObrazPodpunktA(ListaObrazow);
- WyswietlObrazy(ListaObrazow);
- DodajObrazPodpunktB(ListaObrazow);
- WyswietlObrazy(ListaObrazow);
- Permutuj(ListaObrazow);
- WyswietlObrazy(ListaObrazow);
- readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement