Afisare mai placuta...

Pascal este un limbaj imperativ, creat inițial pentru a ajuta la predarea noțiunilor de programare structurati studenților. Delphi, urmașul lui Pascal, este un mediu de dezvoltare pentru aplicații Windows. Delphi este primul limbaj de programare (Object Pascal, mai exact) care a îmbinat ușurința în programare a limbajelor de nivel înalt și puterea uneltelor de lucru de nivel scăzut într-un mediu RAD.

Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 18:17

Salutare
Am și eu o întrebare mai exact: cum aș putea să afișez dintr-un fiser text pe ecran în modul următor:


  1.  
  2.              Obiect 1                Obiect 4
  3.              Lungime=11              Lungime=41      
  4.              Obiect 2                Obiect 5
  5.              Lungime=12              Lungime=22
  6.              Obiect 3                Obiect 6  
  7.              Lungime=14              Lungime=17  
  8.            
  9.      



Asta ar fi dacă în fiser ar exista 6 obiecte (număr par), dacă ar fi număr impar să afișeze pe prima coloana cele mai multe (Ex: 11 obiecte, pe prima coloana 6, iar pe a 2-a 5).

Are cineva idei? :D
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby DarkByte » 29 Nov 2010, 18:35

Arata-ne ce-ai facut pana acum. Ca idee, ceea ce vrei nu e greu, dar vreau sa vad ce ai incercat.
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 19:35

Am reusit sa fac fara fisiere:

  1. uses crt;
  2. var i:integer;
  3.     nr:array[1..20] of integer;
  4.     x,y:integer;
  5. begin
  6.   clrscr;
  7.   for i:=1 to 6 do
  8.   begin
  9.     writeln('nr');
  10.     readln(nr[i]);
  11.   end;
  12.   i:=1;
  13.   repeat
  14.   write(nr[i],'  ',nr[i+1]);
  15.   writeln;
  16.   i:=i+2;
  17.   inc(y);
  18.   until y=3;
  19. end.


Am facut la fel cu fisiere, si a luat-o programul la sanatoasa (afisa la nesfarsit si peste tot 0).
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby DarkByte » 29 Nov 2010, 19:39

Dude, pune ce-ai facut cu fisiere, nu am de unde sa ghicesc ce-ai gresit in programul ala cand tu mi-l arati pe asta :-l
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 19:57

Asta ii codul, am încercat sa fac la fel cum am făcut la fără fișiere, dar nu prea merge.
  1. uses crt;
  2. type software=record
  3.      denumire:string;
  4.      pret:integer;
  5.      end;
  6.     depozitul=array[1..20] of software;
  7. var
  8.     i,n:integer;
  9.     opt:integer;
  10.     f:text;
  11.     depozit:depozitul;
  12.  
  13. procedure citire(var n:integer);
  14. begin
  15.   i:=1;
  16.   reset(f);
  17.   while not eof(f) do
  18.   begin
  19.     readln(f,depozit[i].denumire);
  20.     readln(f,depozit[i].pret);
  21.     i:=i+1;
  22.   end;
  23.  close (f);
  24.  n:=i;
  25. end;
  26.  
  27. procedure afisare(n:integer);
  28. var y:integer;
  29. begin
  30.   i:=1;
  31.   repeat
  32.   write('Den:',depozit[i].denumire,' ','den=',depozit[i+1].denumire);
  33.   write('Pretul:',depozit[i].pret,' ','Pretul:',depozit[i+1].pret);
  34.   writeln(' ');
  35.   i:=i+2;
  36.   inc(y);
  37.   until y=2;
  38. end;
  39. begin
  40.    assign(f,'softtxt.txt');
  41.    repeat
  42.    writeln('1.Citirea datelor');
  43.    writeln('2.Afisarea datelor');
  44.    writeln('3.Iesire');
  45.    readln(opt);
  46.    case opt of
  47.      1:citire(n);
  48.      2:afisare(n);
  49.    end;
  50.    until opt=3;
  51.   readln;
  52. end.
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby DarkByte » 29 Nov 2010, 20:01

In primul program afisezi un i, apoi un i+1 ... in al doilea afisezi doar ceva legat de i+1 ... imi scapa mie ceva ?

P.S. variabila y pare cam prea ne-initializata pentru gustul meu ...
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 20:47

DarkByte wrote: in al doilea afisezi doar ceva legat de i+1 ... imi scapa mie ceva ?


Cum adica numai ceva legat de i+1 ? :-?

PS. Am rezolvat problema cu afisare pe jumatate, am inlocuit procedura de afisare cu :
  1.  
  2. procedure afisare(n:integer);
  3.  
  4. begin
  5.   clrscr;
  6.   for i:=1 to n-1 do
  7.   begin
  8.     writeln('Den:',depozit[i].denumire,'        ','Den:',depozit[i+1].denumire);
  9.     write('Pretul:',depozit[i].pret,'           ',' Pretul:',depozit[i+1].pret);
  10.     writeln(' ');
  11.     i:=i+1;
  12.     writeln;
  13.   end;
  14. end;


Acuma am alta problema, imi afiseaza prima coloana bine, dar dupa aceea le afiseaza in functie de cat de mare este denumirea/pretul celui de pe prima coloana (caractere), ca in poza de mai jos:

Image

Se poate face cumva sa nu mai afișeze asa :-?
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby smith » 29 Nov 2010, 21:08

Păi nu-i așa greu (numa că DarkByte vrea să te pună să gândești, DAMN IT!). O să mor oricum că ți-am dat mură în gură :))

Să zicem că ai o "constantă" de 50 de caractere C (distanța coloanei a 2-a față de marginea stângă).
Atunci primul cuvânt din prima coloană îl scrii normal. Notăm cu len(x) lungimea unui cuvânt x. Al doilea cuvânt îl scrii după ce scrii încă C-len(primul_cuvant) spații.

E un exemplu simplu, dar se poate generaliza pentru mai multe coloane și se poate avea în vedere și mărimea constantei, care să fie mai mare decât oricare din cuvintele de pe prima coloană (ca să nu existe probleme).
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 22:04

smith wrote:distanța coloanei a 2-a față de marginea stângă.

Cum adica fata de marginea stanga ?

Atunci primul cuvânt din prima coloană îl scrii normal. Notăm cu len(x) lungimea unui cuvânt x. Al doilea cuvânt îl scrii după ce scrii încă C-len(primul_cuvant) spații.


Aici am inteles ca trebuie sa scad din constanta C, lungimea cuvantului si sa afisez spatii, problema este cum afisiez spatile (de ex: daca trebuie sa afisez 10).
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby smith » 29 Nov 2010, 22:08

1. Față de începutul de rând = față de marginea stânga
2. Figure it out dude:))
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82

Re: Afisare mai placuta...

Postby andreiandreiq » 29 Nov 2010, 22:36

Ok, am inteles faza cu "Față de începutul de rând", problema e cum declar o constanta fata de marginea stângă ?(nu am mai folosit niciodata).
0,0p / 0 votes
Image
User avatar
andreiandreiq
Word
 
Joined: 30 Dec 2009
Status: 33.33

Re: Afisare mai placuta...

Postby smith » 29 Nov 2010, 22:49

Dude, e un număr întreg. Nici măcar nu trebuie să fie constantă. Poate să fie o simplă variabilă de tip întreg.
Să zicem că ai :
C = 10 și ai de afișat: objUnu, objDoi, objTrei, objPatru.
Afișarea va arăta:

objUnu1234objDoi   
objTrei123objPatru

Numerele reprezintă defapt spații.
Pentru primul rând sunt C-len("objUnu") spații. Adică 10-6=4.
Pentru cel de-al doilea sunt C-len("objTrei") spații. Adică 10-7=3.

8-|
0,0p / 0 votes
Ilea Cristian
User avatar
smith
Enum
 
Joined: 29 Dec 2009
Location: Cluj-Napoca
Status: 82


Return to Pascal / Delphi

Who is online

Users browsing this forum: No registered users and 0 guests