Hogyan kell a következő feladatot megoldani Pascalban?
Kérjen be egy szöveget és egy színt! A bekért szöveget írassa ki a bekért színnel!
Tudom, hogy csak féle angol színt tudok megadni, viszont a Free Pascal program csak számkódokkal fogadná el, úgy, ahogy én próbáltam. Tehát azt mondja, hogy a változót byte-ban deklaráljam, ne stringben...
Esetleg valaki le tudná nekem írni ezt a kis programot, úgy, hogy angol színt keljen beírni? Előre is köszönöm! :)
Tudtommal 16 szín van összesen, és tudtommal nem tartalmazzák az angol nevüket String-ként és nem is iterálhatók -> ezért manuálisan kötném össze őket. Igaz, rég Pascal-oztam már.
De mondjuk ezt megpróbálhatod:
"pascal color from string" keresésre jött ki.
(Mondjuk nem gondolom, hogy egy beépített függvény meghívásából állna a feladat, de ez már csak vélemény.)
Esetleg deklarálhatsz egy rekordokból álló tömböt, amely elemei egy string és egy byte. Ebben előre létrehozol egy listát, hogy melyik szöveghez melyik szám tartozik, majd amikor beírnak egy színt, egy keresési algoritmussal kikeresed, hogy a tömbben hányadik rekordnak az első eleme. Majd pedig veszed annak a rekordnak a második elemét.
Ez általános megoldás, hogy aztán ez egyszerűbb, vagy pár elágazás, annak eldöntését már rád bízom. ;-)
Nagyon puritán módon egy függvény, nem szép, de érthető:
program Project1;
{$mode objfpc}{$H+}
uses
Classes, Crt;
function szin (color : string) : byte;
begin
Result := 15;
case LowerCase(color) of
'black' : Result := 0;
'blue' : Result := 1;
'green' : Result := 2;
'cyan' : Result := 3;
'red' : Result := 4;
'magenta' : Result := 5;
'brown' : Result := 6;
'ligthgray' : Result := 7;
'darkgray' : Result := 8;
'lightblue' : Result := 9;
'lightgreen' : Result := 10;
'lightcyan' : Result := 11;
'lightred' : Result := 12;
'lightmagenta' : Result := 13;
'yellow' : Result := 14;
'white' : Result := 15;
end;
end;
var myColor : string;
begin
Readln(myColor);
TextColor(szin(myColor));
WriteLn(myColor);
ReadLn;
end.
Ilyesmire gondoltam, mint lentebb. Kissé fáradt vagyok, gondolom, frappánsabban is meg lehetett volna írni.
A nev[] tömb utolsó kérdőjele nem játszik, és valószínűleg fölösleges, de nem látom át pontosan, hogy nem vezethet-e néha túlcsorduláshoz, ha kevesebb a tömbelemek száma, mint a szinkod() függvény ciklusváltozójának maximális értéke, gondoltam, jobb a békesség.
program szinkod;
uses Crt;
var
szin : byte;
szo : string;
nev : array[1..17] of string[12] = (
'black','blue','green','cyan','red','magenta','brown','lightgray','darkgray',
'lightblue','lightgreen','lightcyan','lightred','lightmagenta','yellow','white',
'?'
);
function szinkod(sz : string): byte;
var i : byte;
begin
i := 0;
repeat
Inc(i);
until (i > 16) or (nev[i] = sz);
szinkod := i - 1;
end;
BEGIN
ClrScr;
WriteLn('Színszínező');
repeat
TextBackground(Black); TextColor(White);
WriteLn; Write('Írd be a szín angol nevét: ');
ReadLn(szo);
szin := szinkod(LowerCase(szo));
if szin > 15 then
begin
TextBackground(LightRed); TextColor( White);
Write('Nincs ilyen szín a készletben: ');
end
else
begin
if (szin = Black) or (szin = DarkGray) then TextBackground(LightGray);
TextColor(szin);
end;
WriteLn(szo);
until szin >15;
TextBackground(Black); TextColor( LightGray);
WriteLn; Write('Enter leütésére vége.'); ReadLn;
END.
Itt az én megoldásom, gondoltam hogy keresek egy másik megoldást, mint a fentebbiek, mármint hogy én is tanuljak, kipróbáljak valamit, amit még eddig nem használtam.
A lowercase ebben az esetben nem kell, azért hagytam ki, case-insensitive a keresés ami végrehajtódik.
Nem tudom hogy a feladat lényege a saját függvény írása volt -e avagy bármi más, amin gondolkodni lehet, amennyiben csak függvénnyel való megoldás a cél, akkor nem releváns a megoldásom...
Program Szin_kiiratas;
uses Classes,Sysutils,crt,strutils;
var
szo : string;
szkod : Integer;
sznevek : TStringList;
begin
sznevek := TStringList.Create;
sznevek.add('Black'); sznevek.add('Blue'); sznevek.add('Green'); sznevek.add('Cian'); sznevek.add('Red'); sznevek.add('Magenta'); sznevek.add('Brown'); sznevek.add('White'); sznevek.add('Grey'); sznevek.add('Light Blue'); sznevek.add('Light Green'); sznevek.add('Light Cian'); sznevek.add('Light Red'); sznevek.add('Light Magenta'); sznevek.add('Yellow'); sznevek.add('High-intensity white');
ClrScr;
TextBackGround (Black);
TextColor (White);
Repeat
WriteLn;
Write('Kérem a szín nevét : ');
ReadLn(szo);
szkod := sznevek.IndexOf (szo);
if (szkod = -1) then WriteLn('Ilyen nevű szín nincs a készletben!');
Until(szkod > -1) and (szkod <=15);
TextColor(szkod);
writeln(szo);
writeln('Enter: vége');
sznevek.free;
ReadLn;
end.
Olyan szinten a feladatra koncentráltam, hogy kihagytam a kiírandó szöveget. :-)
Itt van javítva.
Program Szin_kiiratas;
uses Classes,Sysutils,crt,strutils;
var
szo, sznev : string;
szkod : Integer;
sznevek : TStringList;
begin
sznevek := TStringList.Create;
sznevek.add('Black'); sznevek.add('Blue'); sznevek.add('Green'); sznevek.add('Cian'); sznevek.add('Red'); sznevek.add('Magenta'); sznevek.add('Brown'); sznevek.add('White'); sznevek.add('Grey'); sznevek.add('Light Blue'); sznevek.add('Light Green'); sznevek.add('Light Cian'); sznevek.add('Light Red'); sznevek.add('Light Magenta'); sznevek.add('Yellow'); sznevek.add('High-intensity white');
ClrScr;
TextBackGround (Black);
TextColor (White);
write('Kérem a kiírandó szöveget : ');
readln(szo);
Repeat
WriteLn;
Write('Kérem a szín nevét : ');
ReadLn(sznev);
szkod := sznevek.IndexOf (sznev);
if (szkod = -1) then WriteLn('Ilyen nevű szín nincs a készletben!');
Until(szkod > -1) and (szkod <=15);
TextColor(szkod);
writeln(szo);
writeln('Enter: vége');
sznevek.free;
ReadLn;
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!