spamers.tk Pagina de start a forumului spamers.tk FAQ Cautare Membri Grupuri Profil Inregistrare Mesaje private Autentificare
C++ 3

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului spamers.tk -> C++ si Visul Basic
Subiectul anterior :: Subiectul urmator  
Autor Mesaj
Royal
Administrator
Administrator
Royal

Data inscrierii: 11/Aug/2008
Mesaje: 359

MesajTrimis: 24/08/2008 20:02    Titlul subiectului: C++ 3 Raspunde cu citat (quote)

1. Cum afisam numere, text, si alte lucruri cu printf.
printf este o functie complexa, care este foarte puternica si poate afisa o gramada de feluri de date in o
gramada de moduri.


Vom da doar cateva chipuri de folosire aici. In cursurile urmatoare vom mai da unele moduri de a
folosi functia printf.


Daca vrem sa scriem un text si un numar putem scrie de exemplu:


textul Eu am varsta: si apoi numarul 17


Desigur se poate folosi printf("Eu am varsta: 17); dar in anumite situatii nu se poate asa.
Daca avem sa zicem varsta intr-o variabila (punga care poate contine valori), si variabila este de tip
numar, adica poate contine doar numere. Atunci nu mai putem sa afisam simplu textul Eu am varsta:
17, ci dorim sa afisam textul Eu am varsta: si apoi variabila care poate contine absolut orice varsta.


In Pascal asta se facea cu writeln(nume_variabila), deci aici se poate printf(nume_variabila)?
Nu! Din cauza ca printf a fost facuta sa fie mai puternica s-a vrut ca sa fie posibil sa se scrie si un text
langa ce contine variabila. Adica un fel de printf( text , variabila, alta_variabila) si sa se afiseze si
textul si ce este in variabile.
Dar daca vrem un text, variabila, si apoi iar text, atunci s-ar putea face printf( text, variabila, text)?
Nu! S-ar fi putut face si asa dar, schema de utilizare este alta, se pune tot textul prima data.


Deci, ca sa putem afisa un text care poate sa aiba in el niste date din niste variabile care pot sa fie
numere se face astfel:


Se pune un text la inceput care poate contine simboluri aparte %d, care nu vor fi afisate, ci
doar vor indica ca urmatorul argument dupa virgula trebuie sa fie o variabila de tip numar, si se va
afisa ce este in acea variabila.
Tot la inceput poate sa fie si text obisnuit, adica diferit de %d, care se va afisa cum este.

Exemple: afisam Eu am varsta: 17

printf("Eu am varsta: %d", 17);

instructiunea va afisa Eu am varsta: 17


Analiza:
> printf citeste ce este intre paranteze,
> incepe cu "Eu am varsta: %d"


iar de aici incepe cu rEu am varsta" care este text natural deci il afiseaza

apoi ajunge la %d, pe care nu-l afiseaza ci stie ca este simbol special si se duce la urmatorul numar
dupa virgula (pe care nu l-a citit inca) trebuie sa-l afiseze in loc de %d
sare la numarul de dupa virgula, vede ca e 17, il afiseaza in loc de %d si sare inapoi unde era
adica grabnic dupa %d
> ajunge la virgula, stie ca pe 17 tocmai l-a scris si acum se termina paranteza
> ajunge la sfarsitul parantezei si gata

Exemplu: vrem sa afisam: Eu am 17 ani


printf("Eu am %d ani", 17);

Analiza

> citeste debutantul text rEu am %d ani"
adica incepe cu rEu am" este text si-l afiseaza
ajunge la %d si tine minte ca urmatorul numar dupa virgula trebuie sa-lscrie in loc de %d,

sare la 17, il afiseaza in loc de %d, si sare inapoi unde era in text dupa %d
> continua cu textul de unde a ramas, adica rani
afiseaza textul rani" deoarece este un text normal
> ajunge la virgula si stie ca pe 17 l-a scris, si se termina paranteza

Exemplu: vrem sa afisam:

Eu am 17 ani si noi suntem in 11 februarie 2007
si cred ca azi este duminica.

Putem scrie asa:

printf("Eu am 17 ani si noi suntem in 11 februarie 2007\nsi cred ca azi este duminica.");

sau asa

printf("Eu am %d ani si noi suntem in 11 februarie 2007\nsi cred ca azi este duminica.", 17);

sau asa

printf("Eu am 17 ani si noi suntem in %d februarie 2007\nsi cred ca azi este duminica.", 11);

sau asa

printf("Eu am 17 ani si noi suntem in 11 februarie %d\nsi cred ca azi este duminica.", 2007);

sau asa

printf("Eu am %d ani si noi suntem in %d februarie %d\nsi cred ca azi este duminica.", 17, 11, 2007);

Sa analizam ultima instructiune.

Ordinea in care apar %d arata ordinea in care apar 17, 11 si 2007, adica
primul %d corespunde cu întâiul numar dupa virgula, adica 17
al doilea %d corespunde cu al doilea numar dupa virgula, adica 11
al treilea %d corespunde cu al treilea numar dupa virgula, adica 2007

> se citeste primul text: "Eu am %d ani si noi suntem in %d februarie %d\nsi cred ca azi este duminica."
> din acest text se incepe cu rEu am", este text normal si se afiseaza
> ajung la inițialul %d, atunci se sare la primul numar dupa virgula si se afiseaza acel numar, adica
17 apoi se revine inapoi
> ajung la rani si noi suntem in" se afiseaza ca e text normal
> ajung la al doilea %d, si se sare la al doilea numar de dupa virgula, adica 11, se afiseaza 11 si se sare
inapoi
> ajung la rfebruarie", afisez textul pentru ca este normal
> ajung la al treilea %d si se sare la al treilea numar de dupa virgula, adica 2007, se afiseaza, apoi se
sare inapoi
> ajung la \n, fiind caracter special se trece la linia urmatoare


> ajung la rsi cred ca azi este duminica." si se afiseaza pt ca este text normal
> se ajunge la sfarsitul textului, se trece de virgule si de numere deoarece au fost afisate si se
ajunge la sfarsit, gata

In final se va afisa

Eu am 17 ani si noi suntem in 11 februarie 2007
si cred ca azi este duminica.

2. Se pot afisa si texte la fel ca si cum afisam numere. Inlocuim %d cu %s
De exemplu:

printf("%s", "ha ha"); va afisa textul ha ha

Care este utilitatea? Nu putem sa scriem printf("ha ha");
Pai daca vrem sa afisam ce este intr-o variabila de tip text, adica o punga care poate sa aiba in ea un
text. Si daca vrem sa afisam aceasta punga intr-un text.


De exmplu vrem sa afisam Eu sunt <variabila cu numele tau> si am <variabila cu varsta ta> ani.
Atunci vom scrie
printf("Eu sunt %s si am %d ani", <variabila cu numele tau>, <variabila cu varsta ta>)


Atunci analizam:
> textul rEu sunt" se afiseaza
> %s spune ca se sare la primul text de dupa virgula adica la variabila de tip text numita <variabila cu
numele tau> si se afiseaza ce contine
> se trece la rsi am" care este text normal si se afiseaza
> se trece la %d care indica ca se sare la al doilea numar de dupa virgula si se afiseaza adica
<variabila cu varsta ta>, deci este o variabila si se va afisa numarul din ea
> se ajunge la rani" si se afiseaza


deci rezultatul este :
Eu sunt <ce nume este in variabila text> si am <ce numar este in variabila numar>.


Exista mai multe moduri de a combina textul cu caracterele speciale pe care le-ai invatat
\n - treci pe randul urmator


%s - marcheaza ca trebuie sa se sara peste virgula si sa se afiseze textul de acolo


%d r11; marcheaza ca se sare dupa virgula sa se afiseze numarul de acolo


Observatie cand se numara pe ce pozitie se afla %d sau %s se iau in considerare numai aceste
simboluri speciale, nu se numara si \n


Exemplu: printf(" %d \n casa %s %s masa \n %d", 5, "un text", "alt text", 23);


pozitiile care 1 2 3 4 1 2 3 4
se numara

Se vede ca pe pozitia 1 este %d in primul text din printf si tot pe pozitia 1 dupa virgula dupa primul

text este un numar5
Pe a doua pozitie este %s care marcheaza un text, pe a doua pozitie dupa virgula de dupa primul text
este textul run text"

Pe a treia pozitie este %s si pe a treia pozitie dupa virgula este ralt text"
Pe a patra pozitie este %d si pe a patra pozitie dupa virgula este 23.
In final va afisa (ignoram spatiile goale care au fost puse pentru asezarea mai buna):


5


casa un text alt text masa


23
Sus
Vezi profilul utilizatorului Trimite mesaj privat
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului spamers.tk -> C++ si Visul Basic Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum


Powered by phpBB © 2001, 2002 phpBB Group
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro