Könnyű program Free Pascal-al, mégis adódik gondom, Hogy kéne?
Tudom hogy tettek már fel kérdést erről a példáról. Viszont nekem nem ugyanaz a gondom.
A Feladat:
Készítsünk programot, amely ki fogja kérdezni a matematikát (két szám összeadását, kivonását és szorzását az <1,10> intervallumból). A két számot és a műveletet a számítógép véletlenszerűen válassza ki. A program akkor fejeződjön be, ha a felhasználó 10 példát kiszámolt helyesen. Rossz válasz esetén kérdezze újra ugyanazt a példát. A program végén írjuk ki az eredményességet százalékokban.
Programom:
var l,f,s1,s2,m,osszeg,szam:integer;
osszes,szazalek,nemjo,jo:integer;
begin
randomize;
l:=0;
f:=0;
nemjo:=0;
jo:=0;
repeat
f:=f+1;
s1:= 1 + random(10);
s2:= 1 + random(10);
m:= 1 + random(3);
if m=1 then begin
repeat
write(f ,'. Feladat: ', s1,' + ', s2,' = ');
readln(szam);
osszeg:=s1 + s2;
if szam=osszeg then begin
writeln('Jo a megoldasod');
jo:=jo+1;
end
else begin
writeln('Nemjo a megoldasod, probald ujra');
nemjo:=nemjo+1;
end;
writeln;
until szam=osszeg;
end;
if m=2 then begin
repeat
write(f ,'. Feladat: ', s1,' - ', s2,' = ');
readln(szam);
osszeg:=s1 - s2;
if szam=osszeg then begin
writeln('Jo a megoldasod');
jo:=jo+1;
end
else begin
writeln('Nemjo a megoldasod, probald ujra');
nemjo:=nemjo+1;
end;
writeln;
until szam=osszeg;
end;
if m=3 then begin
repeat
write(f ,'. Feladat: ', s1,' * ', s2,' = ');
readln(szam);
osszeg:=s1 * s2;
if szam=osszeg then begin
writeln('Jo a megoldasod');
jo:=jo+1;
end
else begin
writeln('Nemjo a megoldasod, probald ujra');
nemjo:=nemjo+1;
end;
writeln;
until szam=osszeg;
end;
if f=10 then l:=1;
until l=1 ;
osszes:=jo+nemjo;
szazalek:=(100 div osszes)*10;
writeln('A feladatsort sikeresen vegigvitted, gratulalok. ');
writeln('Az eredmenyesseged szazalekba a kovetkezo: ', szazalek,'%');
readln;
end.
Tudom kicsit túlbonyolítottam, de szeretem ha csinos a program :D A gond az arány számolásával lenne...
Mivel az én megoldásommal a rossz válaszokat (ha 1 feladatot 3x rosszul adsz meg azt 3x rossznak számolja)
is beleszámolja az összesbe és utána abból számítja az arány. Szerintem úgykéne számolnia az arányt hogy 10 feladatból hány feladatot oldunk meg 1.-re hibásnak. Ezzekkel a ciklusokkal meglehet ezt így oldani ??
Úgy valósítod meg ahogy szeretnéd, erről szól a programozás. Én így gondoltam:
jo = jo + pont;
pont = 0;
end
else
begin
writeln('nemjó,..');
nemjo = nemjo+pont;
pont = 0;
end;
'Tudom kicsit túlbonyolítottam, de szeretem ha csinos a program' Én is :))
program kikerdez;
var feladat, jo, rossz, hibas, s1, s2, melyik : integer;
function osszead(f, a, b : integer) : boolean;
var eredmeny, hiba : integer;
s: string;
begin
hiba := 1;
while hiba <> 0 do
begin
Write(f, '.Feladat: ', a, ' + ', b, ' = ');
ReadLn(s);
Val(s, eredmeny, hiba);
if hiba <> 0 then WriteLn('Csak szamot adhatsz meg !');
end;
if (a + b) = eredmeny then osszead := True else osszead := False;
end;
function kivon(f, a, b : integer) : boolean;
var eredmeny, hiba : integer;
s: string;
begin
hiba := 1;
while hiba <> 0 do
begin
Write(f, '.Feladat: ', a, ' - ', b, ' = ');
ReadLn(s);
Val(s, eredmeny, hiba);
if hiba <> 0 then WriteLn('Csak szamot adhatsz meg !');
end;
if (a - b) = eredmeny then kivon := True else kivon := False;
end;
function szoroz(f, a, b : integer) : boolean;
var eredmeny, hiba : integer;
s: string;
begin
hiba := 1;
while hiba <> 0 do
begin
Write(f, '.Feladat: ', a, ' * ', b, ' = ');
ReadLn(s);
Val(s, eredmeny, hiba);
if hiba <> 0 then WriteLn('Csak szamot adhatsz meg !');
end;
if (a * b) = eredmeny then szoroz := True else szoroz := False;
end;
begin
feladat := 1;
jo := 0;
Randomize;
repeat
rossz := 0;
melyik := Random(3) + 1;
case melyik of
1: begin
s1 := Random(10) + 1;
s2 := Random(10) + 1;
while not osszead(feladat, s1, s2) do
begin
WriteLn('Hibas valasz !');
Inc(hibas);
Inc(rossz);
end;
if rossz = 0 then Inc(jo);
Inc(feladat);
WriteLn('Jo valasz !');
end;
2: begin
s1 := Random(10) + 1;
s2 := Random(10) + 1;
while not szoroz(feladat, s1, s2) do
begin
WriteLn('Hibas valasz !');
Inc(hibas);
Inc(rossz);
end;
if rossz = 0 then Inc(jo);
Inc(feladat);
WriteLn('Jo valasz !');
end;
3: begin
s1 := 0;
s2 := 1;
while s1 < s2 do
begin
s1 := Random(10) + 1;
s2 := Random(10) + 1;
end;
while not kivon(feladat, s1, s2) do
begin
WriteLn('Hibas valasz !');
Inc(hibas);
Inc(rossz);
end;
if rossz = 0 then Inc(jo);
Inc(feladat);
WriteLn('Jo valasz !');
end;
end;
until feladat > 10;
WriteLn('Feladatok szama: ', feladat - 1);
WriteLn('Probalkozasok szama: ', feladat + hibas - 1);
WriteLn('Elsore eltalaltak szama: ', jo);
WriteLn('Eredmenyesseg: ', (jo * 100) / (feladat - 1) :3:0, ' %');
end.
Ha már annyira csinosítgatjátok a programot, íme egy "csinosabb" verzió, amiben nincsenek fölöslges ismétlések (copy paste kódok).
program matek;
uses crt;
type
TMuvjel=(o,k,sz);
function muvelet(muvjel:TMuvjel; a,b:byte):boolean;
var
eredmeny, etmp: byte;
begin
writeln('Kerem irja be a muvelet eredmenyet!');
write(a);
case muvjel of
o: begin
write('+');
etmp:=a+b;
end;
k: begin
write('-');
etmp:=a-b;
end;
sz: begin
write('*');
etmp:=a*b;
end;
end;
write(b,'=');
readln(eredmeny);
if eredmeny=etmp then muvelet:=true
else muvelet:=false;
end;
procedure sorsol(muvjel: TMuvjel; var a,b: byte);
var ujra: boolean;
begin
ujra:=true;
while ujra do
begin
a:=random(10)+1;
b:=random(10)+1;
if muvjel=k then
begin
if a<b then ujra:=true
else ujra:=false;
end
else ujra:=false;
end;
end;
var jo, rossz, s1, s2, i, muv : byte;
mjel: TMuvjel;
frossz: boolean;
begin
randomize;
frossz:=false;
rossz:=0;
jo:=0;
for i:=1 to 10 do
begin
clrscr;
writeln(i,'/10. feladat');
muv:=random(3)+1;
case muv of
1 : mjel:=o;
2 : mjel:=k;
3 : mjel:=sz;
end;
sorsol(mjel,s1,s2);
while not muvelet(mjel,s1,s2) do
begin
if not frossz then
begin
frossz:=true;
inc(rossz);
end;
writeln('Hibas valasz!!!');
end;
Writeln('Gratulalok! Helyes a megoldas.');
if not frossz then inc(jo);
frossz:=false;
end;
writeln('A 10 feladatbol ',jo,' helyes valaszt adtal');
writeln('A teljesitmenyed: ', ((jo/10)*100):3:0,'%');
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!