Közismereti informatika 2.zh T-M szakirány

Hasonló dokumentumok
6. A Pascal nyelv utasításai

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Érdekes informatika feladatok

Bakalárska práca Bakalár munka

I. Egydimenziós tömb elemeinek rendezése

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Feltételezés: A file strukturálisan helyes, tanszékenként nem üres, de az adott listázási feladatban kikötött számút nem haladja meg.

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

A feladat. A főprogram

Rekurzió(k) - iteráció(k) Gyakorlati összefoglaló Tartalom... 2 Alap rekurzív példák... 3 Tételek rekurzív és iteratív megoldásai...

REKURZIÓK SZÁMÍTÓGÉPES PROGRAMOK SEGÍTSÉGÉVEL

Demográfiai modellek (folytatás)

Delphi programozás IV.

Az Összegfokozatos listázás téma 2. gyakorlata

Sztringkezelő függvények. A string típusú változók kezelése, használata és szerepük a feldolgozás során

1. A feladatról. 2. Az áramkör leírása. Mechatronika, Optika és Gépészeti Informatika Tanszék D528. Léptetőmotor vezérlése

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

2.6. Utasítások használata

<... < s n. Írjuk le a megoldási módszert, és adjunk meg egy megjegyzésekkel ellátott Pascal-programot. A bemeneti adatokat helyesnek tekintjük.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás alapjai. 5. előadás

Egyszerű példaprogramok gyakorláshoz

Algoritmizálás és adatmodellezés tanítása 1. előadás

Delphi programozás III.

PASzSz. Dr. Kotsis Domokos

DOKUMENTÁCIÓ KÉSZÍTETTE: Naszári László I. évf. levelező Informatika tanári szak 2003.

Bevezetés a programozásba I.

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

Algoritmizálás és adatmodellezés tanítása 9. előadás

INFORMATIKAI ALAPISMERETEK

Megoldott feladatok. Informatika

Felvételi tematika INFORMATIKA

Demografia / Demográfiai modell

14. Mediánok és rendezett minták

Algoritmusok vektorokkal keresések 1

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Rekurzió. Tartalomjegyzék. Készítette: Gál Tamás

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Tartalomjegyzék Algoritmusok - pszeudókód

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Algoritmizálás + kódolás C++ nyelven és Pascalban

Az első fájlos program

Eljárások, függvények

Delphi programozás I.

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

FELADATGYÜJTEMÉNY. 9.évfolyam...

BACTRACK GYAKORLAT VÁZLAT. Szlávi Péter

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

INFORMATIKA javítókulcs 2016

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Demográfiai modellek

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Algoritmusok - pszeudókód... 1

A 2011/2012 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

PROGRAMOZÁSI NYELVEK (ELMÉLET)

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

A rekurzív algoritmusok tanításáról

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

INFORMATIKA tétel 2019

9. Megoldás keresése visszalépéssel (backtracking)

értékel függvény: rátermettségi függvény (tness function)

A Pascal programozási nyelvben minden programnak a következő szerkezete van:

Erdélyi Magyar TudományEgyetem (EMTE

Algoritmizálás és adatmodellezés tanítása 2. előadás

Geometriai algoritmusok

Algoritmusok bonyolultsága

Gauss-Seidel iteráció

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Knuth-Morris-Pratt algoritmus

Programozás alapjai Free Pascal

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Programozási tételek általánosítása 2. Szlávi Péter 2015

Algoritmizálás és adatmodellezés 2. előadás

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

értékel függvény: rátermettségi függvény (tness function)

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

SZÁMÍTÓGÉPI GRAFIKA MARKEREK

Visszalépéses kiválogatás

Dinamikus programozás - Szerelőszalag ütemezése

1. Előadás Matlab lényeges vonásai,

Algoritmusok bonyolultsága

Algoritmusok és adatszerkezetek I. 1. előadás


Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Táblázatok fontosabb műveletei 1

Programozási segédlet

A félév során előkerülő témakörök

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Egyszerű programok készítése Kifejezések Bitszintű műveletek Relációs műveletek... 58

Átírás:

1. feladat: Az alábbi algoritmus egy szövegnek meghatározza a leghosszabb szavát és annak hosszát. Írja át időben hatékonyabbra! Írja meg az időben hatékonyabb Pascal programot! Eljárás Maxkiv(S:Szöveg; Változó Lhszo:Szöveg; Mhossz:Egész): Lhszo:= ; Szo:= Ciklus i=1-től hossz(s)-ig Ha S[i] akkor Szo:=Szo+S[i] különben Ha hossz(szo)>hossz(lhszo) akkor Lhszo:=Szo Szo:= Ha hossz(szo)>hossz(lhszo) akkor Lhszo:=Szo Mhossz:=hossz(Lhszo) 2. feladat: Adott egy egészekből álló alsó háromszög mátrix (vagyis a fő diagonális felett csupa 0 áll). Keressen meg egy olyan oszlopot, amelyre igaz, hogy elemei összegének abszolút értékét mod 2 véve 0-t kapunk, a mögötte levő oszlop elemei összegének abszolút értékét mod 2 véve pedig 1-t kapunk, vagy fordítva (az első ad 1-t, a mögötte lévő pedig 0-t)! Eljárás Lassú_Keresés(N:Egész, X:TömbTip, Változó Van:Logikai, Hol:Egész): Van:=Hamis Ciklus j=1-től N-1-ig Ha ((((Oszloposszeg(j) mod 2)=0) és ((Oszloposszeg(j+1) mod 2)=1)) vagy (((Oszloposszeg(j) mod 2)=1) és ((Oszloposszeg(j+1) mod 2)=0))) és nem Van akkor Van:=Igaz; Hol:=j Függvény Oszloposszeg(j):egész s:=0 Ciklus i=1-tól N-ig s:=s+x[i,j] Ha s>=0 akkor Oszloposszeg:=s különben Oszloposszeg:=(-1)*s Függvény vége Írja át a fenti eljárást időben hatékonyabbra! Írja meg az időben hatékonyabb Pascal programot! Értékelés: Mindkét feladatra igaz, hogy több helyen lehet hatékonyabbra írás bennük, ezek megvalósítási számától (és helyességétől) függ az osztályzat. Ha csak hatékonyabb algoritmust ír, és papíron beadja, akkor amennyiben az helyes, feladatonként 1-1 osztályzatnyi lehet maximum az értéke, ha helyes programot is (csak a hatékony algoritmusra), akkor feladatonként újabb 1-1 osztályzat lehet maximum. Elégtelenből indulva + 4 osztályzattal jöhet ki az 5-ös. Munkája végeztével a \\inf.elte.hu\dfs\zh\kozinf1 oldalra másolja fel a saját Neptun kódjára keresztelt tömörített állományt, melyben legyenek benne a hatékony programjai (feladat1.pas, feladat2.pas).

Megoldások 1. feladat: Egy olyan megoldást nézünk, amelyben mérjük is a hatékonyság alakulását az eredeti és a javított esetében. Amit érdekes lehet számlálni az az karakterhasonlítások száma, szövegbővítések száma és a szövegmásolások száma. Program Zh12_13_2_2_1; { Szerzö: Szlávi Péter Neptun-kód: ZDOF7J Feladat (2012/13 2. félév 2. zh. 1. feladat): Az alábbi algoritmus egy szövegnek meghatározza a leghosszabb szavát és annak hosszát. Írja át időben hatékonyabbra! Írja meg az időben hatékonyabb Pascal programot! Eljárás Maxkiv(S:Szöveg; Változó Lhszo:Szöveg; Mhossz:Egész): Lhszo:=''; Szo:='' Ciklus i=1-től hossz(s)-ig Ha S[i]<>' ' akkor Szo:=Szo+S[i] különben Ha hossz(szo)>hossz(lhszo) akkor Lhszo:=Szo Szo:='' Ha hossz(szo)>hossz(lhszo) akkor Lhszo:=Szo Mhossz:=hossz(Lhszo) Megoldás algoritmusa: Eljárás Maxkiv(S:Szöveg, Változó Lhszo:Szöveg, Mhossz:Egész); Lhszo:='' hs:=length(s)//amígos ciklusnál esetében csak egyszer kelljen kiszámolni i:=1 Ciklus amíg i<=hs //a szóközintervallumok átlépése: Ciklus amíg i<=hs és S[i]=' ' i:+1 Ha i<=hs akkor//szókezdetnél tartunk, jöhet a szó: Szo:=S[i] i:+1 Ciklus amíg i<=hs és S[i]<>' ' Szo:=Szo+S[i] i:+1 Ha i<=hs akkor//szóköznél tartunk, lépjük át: i:+1 //az eddigi leghosszabb-e: Ha hossz(szo)>hossz(lhszo) akkor Lhszo:=Szo Mhossz:=Length(Lhszo) } Uses Crt; S:String; Lhszo:String; Mhossz:Integer;

Procedure Beolvas( S:String); Writeln('A mondat:'); Readln(S); //a hatékonyság mérés kedvéért számláljuk a jellegzetes műveleteket: azdb,hozzadb,mozgdb:integer; Procedure Inic; azdb:=0; hozzadb:=0; mozgdb:=0; Function AzonosE(Const c1,c2:char):boolean; AzonosE:=c1=c2; Inc(azDb); Procedure KarakterMozgatas( s1:string; Const s2:string); s1:=s2; Inc(mozgDb,Length(s2)+1);//+1: hossz-állítás Procedure Hozza( s:string; Const c:char); s:=s+c; Inc(hozzaDb,Length(s)+1);//+1: hossz-állítás //Eredeti kód: --------------------------------------------------------- Procedure Maxkiv(S:String; Lhszo:String; Mhossz:Integer); i:integer; Szo:String; // Lhszo:=''; Szo:=''; KarakterMozgatas(Lhszo,''); KarakterMozgatas(Szo,''); For i:=1 to Length(S) do // If S[i]<>' ' then If Not AzonosE(S[i],' ') then // Szo:=Szo+S[i]; Hozza(Szo,S[i]); else // If Length(Szo)>Length(Lhszo) then Lhszo:=Szo; If Length(Szo)>Length(Lhszo) then KarakterMozgatas(Lhszo,Szo); // Szo:=''; KarakterMozgatas(Szo,''); // If Length(Szo)>Length(Lhszo) then Lhszo:=Szo; If Length(Szo)>Length(Lhszo) then KarakterMozgatas(Lhszo,Szo); Mhossz:=Length(Lhszo); //Hatékonyabb kód: ----------------------------------------------------- Procedure MaxkivGyors(S:String; Lhszo:String; Mhossz:Integer); i,hs:integer; Szo:String;

// Lhszo:=''; KarakterMozgatas(Lhszo,''); hs:=length(s);//amígos ciklusnál előre, csak egyszer kell kiszámolni i:=1; While i<=hs do //a szóközintervallumok átlépése: // While (i<=hs) and (S[i]=' ') do While (i<=hs) and AzonosE(S[i],' ') do Inc(i); If i<=hs then//szókezdetnél tartunk, jöhet a szó: // Szo:=S[i]; KarakterMozgatas(Szo,S[i]); Inc(i); // While (i<=hs) and (S[i]<>' ') do While (i<=hs) and Not AzonosE(S[i],' ') do // Szo:=Szo+S[i]; Hozza(Szo,S[i]); Inc(i); If i<=hs then//szóköznél tartunk, lépjük át: Inc(i) //az eddigi leghosszabb-e: // If Length(Szo)>Length(Lhszo) then Lhszo:=Szo; If Length(Szo)>Length(Lhszo) then KarakterMozgatas(Lhszo,Szo); Mhossz:=Length(Lhszo); ClrScr; Beolvas(S); Inic; Maxkiv(S, Lhszo,Mhossz); Writeln('A szöveg "',S,'", hossza:',length(s),'.'); Writeln('A leghosszabb szó "',Lhszo,'", hossza:',mhossz,'.'); Writeln(' Azonosságvizsgálatok száma:',azdb); Writeln(' Hozzávételek száma:',hozzadb); Writeln(' Karaktermozgatások száma:',mozgdb); ReadKey; Inic; MaxkivGyors(S, Lhszo,Mhossz); Writeln('A szöveg "',S,'", hossza:',length(s),'.'); Writeln('A leghosszabb szó "',Lhszo,'", hossza:',mhossz,'.'); Writeln(' Azonosságvizsgálatok száma:',azdb); Writeln(' Hozzávételek száma:',hozzadb); Writeln(' Karaktermozgatások száma:',mozgdb); ReadKey;. 2. feladat: A megoldás algoritmusa: Eljárás Gyors_Keresés(N:Egész, X:TömbTip, Változó Van:Logikai, Hol:Egész): j:=1 oöa0:=oszloposszeg(1) mod 2=0 //az aktuális oszlop összege páros-e? oök0:=oszloposszeg(2) mod 2=0 //a következő oszlop összege páros-e? Ciklus amíg j<n és (nem oöa0 vagy oök0) és (oöa0 vagy nem oök0) j:+1 oöa0:=oök0 oök0:=oszloposszeg(j+1) mod 2=0

Van:=k<N Ha Van akkor Hol:=j Függvény Oszloposszeg(j):egész s:=0 Ciklus i=j-tól N-ig s:+x[i,j] Ha s>=0 akkor Oszloposszeg:=s különben Oszloposszeg:=(-1)*s Függvény vége A kód egy olyan megoldáskódja, amelyben mérjük a hatékonyság alakulását is az eredeti és a javított esetében. Amit érdekes lehet számlálni az most az összeadások száma. Program Zh12_13_2_2_2; { Szerzö: Szlávi Péter Neptun-kód: ZDOF7J Feladat (2012/13 2. félév 2. zh. 2. feladat): Adott egy egészekből álló alsó háromszög mátrix (vagyis a fő diagonális felett csupa 0 áll). Keressen meg egy olyan oszlopot, amelyre igaz, hogy elemei összegének abszolút értékét mod 2 véve 0-t kapunk, a mögötte levő oszlop elemei összegének abszolút értékét mod 2 véve pedig 1-t kapunk, vagy fordítva (az első ad 1-t, a mögötte lévő pedig 0-t)! Eljárás Lassú_Keresés(N:Egész, X:Tömbtip, Változó Van:Logikai, Hol:Egész): Van:=Hamis Ciklus j=1-től N-1-ig Ha ((((Oszloposszeg(j) mod 2)=0) és ((Oszloposszeg(j+1) mod 2)=1)) vagy (((Oszloposszeg(j) mod 2)=1) és ((Oszloposszeg(j+1) mod 2)=0))) és nem Van akkor Van:=Igaz; Hol:=j Függvény Oszloposszeg(j):egész s:=0 Ciklus i=1-tól N-ig s:=s+x[i,j] Ha s>=0 akkor Oszloposszeg:=s különben Oszloposszeg:=(-1)*s Függvény vége Írja át a fenti eljárást időben hatékonyabbra! Írja meg az időben hatékonyabb Pascal programot! Megoldás algoritmusa: Eljárás Gyors_Keresés(N:Egész, X:Tömbtip, Változó Van:Logikai, Hol:Egész): j:=1 oöa0:=oszloposszeg(1) mod 2=0 //az aktuális oszlop összege páros-e? oök0:=oszloposszeg(2) mod 2=0 //a következő oszlop összege páros-e? Ciklus amíg j<n és (nem oöa0 vagy oök0) és (oöa0 vagy nem oök0) j:+1 oöa0:=oök0 oök0:=oszloposszeg(j+1) mod 2=0 Van:=j<N Ha Van akkor Hol:=j

Függvény Oszloposszeg(j):egész s:=0 Ciklus i=j-tól N-ig s:+x[i,j] Oszloposszeg:=s Függvény vége } Uses Crt; Const MaxN=20; Type TombTip=Array [1..MaxN,1..MaxN] of Integer; AHM:TombTip; N:Integer; VanE:Boolean; Hol:Integer; Procedure Feltolt; var i,j:integer; c:char; Write('A méret:'); Readln(N); Writeln('Kalviatura-bemenet/Automatikusan? (K/A)'); c:=readkey; If UpCase(c)='K' then For i:=1 to N do For j:=1 to i do Write('(',i:3,',',j:3,'):'); Readln(AHM[i,j]); For j:=j+1 to N do AHM[i,j]:=0; else For i:=1 to N do For j:=1 to i do AHM[i,j]:=Random(2*N)-N; For j:=j+1 to N do AHM[i,j]:=0; //ellenőrző listázás: For i:=1 to N do For j:=1 to N do Write(AHM[i,j]:3); Writeln;

//a hatékonyság mérés kedvéért számláljuk a jellegzetes műveleteket: hozzadb:integer; Procedure Inic; hozzadb:=0; Procedure Hozzaad( s:integer; Const e:integer); s:=s+e; Inc(hozzaDb); //Eredeti kód: --------------------------------------------------------- Procedure Lassu_Kereses(N:Integer; X:TombTip; Van:Boolean; Hol:Integer); j:integer; Function Oszloposszeg(Const j:integer):integer; s,i:integer; s:=0; For i:=1 to N do // s:=s+x[i,j]; Hozzaad(s,X[i,j]); If s>=0 then Oszloposszeg:=s else Oszloposszeg:=(-1)*s; Van:=False; For j:=1 to N-1 do If ((((Oszloposszeg(j) mod 2)=0) and ((Oszloposszeg(j+1) mod 2)=1)) or (((Oszloposszeg(j) mod 2)=1) and ((Oszloposszeg(j+1) mod 2)=0))) and not Van then Van:=True; Hol:=j; //Hatékonyabb kód: ----------------------------------------------------- Procedure Gyors_Kereses(N:Integer; X:TombTip; Van:Boolean; Hol:Integer); j:integer; ooa0,ook0:boolean; Function Oszloposszeg(Const j:integer):integer; s,i:integer; s:=0; For i:=j to N do // s:=s+x[i,j]; Hozzaad(s,X[i,j]); Oszloposszeg:=s;

j:=1; ooa0:=oszloposszeg(1) mod 2=0;//az aktuális oszlop összege páros-e? ook0:=oszloposszeg(2) mod 2=0;//a következő oszlop összege páros-e? While (j<n) and (not ooa0 or ook0) and (ooa0 or not ook0) do Inc(j); ooa0:=ook0; ook0:=oszloposszeg(j+1) mod 2=0; Van:=j<N; If Van then Hol:=j; ClrScr; Feltolt; Inic; Lassu_Kereses(N,AHM,VanE,Hol); If VanE then Writeln('Van, mégpedig a(z) ',Hol,'. oszlopnál.'); else Writeln('Nincs.'); Writeln('Összeadások száma:',hozzadb); Inic; Gyors_Kereses(N,AHM,VanE,Hol); If VanE then Writeln('Van, mégpedig a(z) ',Hol,'. oszlopnál.'); else Writeln('Nincs.'); Writeln('Összeadások száma:',hozzadb); ReadKey;.