Care din urmatoarele tipuri pot fi folosite pentru variabila contor dintr-o instructiune for:
1.int
2.float
3.char
4.double
a)1 si 2
b)toate
c)1 si 3
d)1,2 si 4
Care din urmatoarele tipuri pot fi folosite pentru variabila contor dintr-o instructiune for:
1.int
2.float
3.char
4.double
a)1 si 2
b)toate
c)1 si 3
d)1,2 si 4
b)
p.s. nu sunt sigur
p.s. 2 asta e intrebare de C
eu zic k rasp e c). 75% sigura
Last edited by Scorpio; 29-12-2007 at 09:30. Motiv: Automerged Doublepost
-- No OnE LiVeS FoReVeR !!!
Orice apasare a butoanelor (litere, cifre, semne speciale, taste functionale) unei tastaturi se produce printransmiterea unui cod unic pentru fiecare caz in parte. Aceste valori, de la 0 la 255, formeaza codul ASCII (American Standard Character International). Valorile corespunzatoare tipului CHAR sunt caracterele ce se pot obtine din codul ASCII.
In c se pot folosi pe post de contor oricare din tipurile standard. Un exemplu de iteratii:
for(float i=2;i<34.5;i*=2.14) cout<<i<<" ";
for(double i=9999.99;i>2;i/=2.5)cout<<i<<" ";
for(char i=0;i<='a';i++) cout<<i<<" ";
si cu pointeri:
int x[10]; x este un pointer la primul element din tablou si presupunand ca vreau sa afisez elementele:
for(i=0;i<10;i++) cout<<x[i];
forul de mai sus este echivalent cu :
for(i=0;i<10;i++) cout<<*(x+i);
sau
for(int * i=x;i<x+10;i++) cout<<*i;
sau si mai smecher
for(i=0;i<10;i++) cout<<i[x];
nota:
in c/c++ nu incercati sa verificati daca 2 numere reale sunt egale, veti avea surprize neplacute.
un exemplu:
float x=10/3;
daca incercati urmatoarea egalitate :
if (x==10/3) cout<<"egale";
else cout<<"inegale";
pentru unele compilatoare veti avea o surpriza ca numerele nu sunt egale.
Explicatia este ca compilatorul face cast la tipul double si (double)x nu este egal cu (double)10/3 atunci cand comparati bit cu bit.
Last edited by cmcx_linux; 29-12-2007 at 11:40.
Nu am Pascal sa testez daca merg double si float , integer merge sigur ... , in fine poti folosi oricare din tipurile de mai sus . ( 95% int , restul le'am vazut mult mai rar, char deloc)
-- No OnE LiVeS FoReVeR !!!
integer e la mintea cocosului ca merge, cat despre C/C++:
vom considera urmatoarea secventa de program:
care are outputul urmator:Cod:#include <stdio.h> int main(){ float i; char c; double d; for(i=0; i<5; i+=0.5) printf("%.3f ",i); printf("\n\n"); for(c='a'; c<'e'; c++) printf("[%d %c]",c,c); printf("\n\n"); for(d=0; d<5; d+=0.5) printf("%.3f ",d); printf("\n\n"); return 0; }
0.000 0.500 1.000 1.500 2.000 2.500 3.000 3.500 4.000 4.500
[97 a][98 b][99 c][100 d]
0.000 0.500 1.000 1.500 2.000 2.500 3.000 3.500 4.000 4.500
Am formatat outputul pentru usurinta, iar la caractere am pus sa afiseze si caracterul, si codul ASCII.
De mentionat ca programul a fost scris in regim ISO-C. cmcx_linux, ce ai scris tu acolo e C++ curat. Sa nu incurcam capra cu varza.
Bottom line este ca in regim de C/C++ se pot folosi toate tipurile de date enumarate pe post de contor.
deci am avut dreptate oricum int e mai bun pt folosinta
Yeap, stiu ca e c++.Este un thread de c++ si motivul pentru care am postat este pentru a-i da lui Mihai_z dreptate, dar, daca variabilele ar fi fost declarate corespunzator,ar merge si in c , sau cel putin conform ansi c 99. Multumesc ca mi-ai atras atentia, data viitoare am sa fiu mai complet in explicatii.
As mai adauga o nota, oameni buni tipul char din c/c++ nu este la fel ca cel din pascal. In c si implicit si c++ char este un tip int cu valori de la -128 la 127 (echivalentul lui byte din pascal, parca). Lui i se poate aplica specificatorul unsigned si atunci gama de valori este de la 0 la 255. Conversia spre caractere se face atunci cand trimiti valorile spre ecran sau imprimata. De aici caracterul de limbaj de nivel jos al c-ului ( c-ul mosteneste si caracteristici de la limbajele de nivel jos, ca assembler).
Alta nota:
datorita celor mentionate mai sus in c/c++ sunt corecte expresii de forma:
char c;
c='a'+2;
printf("%c",c); /* va afisa c */
la compilare compilatorul va inlocui automat caracterul 'a' cu codul corespunzator variabilei ( signed/unsigned) si il va folosi ca atare in suma.
Bine k mai e lume care stie in C k eu la fac pe draq dak am inteles vreun program in C.
Incearca sa treci apa ca Titanicul,nu ca gasca.
Raspunsul corect este c) 1 si 3 (int si char)
Din moment ce for este o structura de iterare (cu alte cuvinte contorul creste cu o unitate la fiecare pas), nu se poate folosi un contor de tip float sau double.
Motivul este simplu: nu poti accesa elementul 3.2 dintr-un vector (adik a[3.2] de ex).
Practic, din moment ce for are forma:
poti sa folosesti ce tip vrei pentru contor atat timp cat sunt respectate regulile limbajului, dar o structura for cu un contor float nu o sa aiba o utilizare practica (este pur si simplu aiurea, numai dak n-ai ce face).Cod:for ( expresie_initiala ; expresie_conditionala ; expresia_de_bucla ) { intructiuni }
Gandesti foarte ingust. O secventa for poate avea multiple aplicatii cu tipuri de date care nu sint int. De exemplu cand efectiv ai nevoie sa folosesti contoarul pentru a incrementa o valoare float (caz pentru tipul float), chiar si tipul char isi poate gasii utilitati in cadrul unei probleme de scoala. SINGURA aplicatie in care nu se preteaza toate tipurile de date, si aici ma refer indeosebi la tipul float, este adresarea indexata, si anume:
float index = 3.2;
char vector[] = {"BLAH!"};
printf("%c",vector[index]);
Atata timp cat tu te uiti la for-uri doar ca la o modalitate de a parcurge un vector, nu te vei gandii si la alte aplicatii practice.
Toate, stii de ce?
Era doar un exemplu. Poti sa-mi dau tu un exemplu de aplicatie practica in care ai nevoie sa incrementezi un float?
Ideea e k un algoritm care foloseste un iterator nu poate avea 6.7 pasi de ex (si aici nu poti sa zici de break pt k tot un numar intreg de pasi se executa). Din moment ce se folosesc un numar intreg de pasi, ce rost are sa folosesti un iterator float? Doar pt k se poate nu inseamna k e gandit bine si k e corect.
Sunt curios ce ar zice un profesor de C++ k eu am dat destule teste din astea si le-am luat.
Mai incerc odada .... poate reusiti sa intelegeti ....
Definitia iteratorului: un tip de date folosit pt a marca o pozitie intr-o colectie de date (vector, lista etc).
http://www.google.ro/search?hl=ro&cl...ition&ct=title
http://en.wikipedia.org/wiki/Iterator
Structura for este o structura care foloseste o iteratie:
http://msdn2.microsoft.com/en-us/library/b80153d8.aspx
Din moment ce o colectie de date nu poate avea un numar rational de elemente (de ex 5.8 elemente) si un algoritm nu poate avea un numar rational de pasi rezulta ca nu poti folosi un float ca iterator (sau contor pt for cum ii ziceti voi).
C++ te lasa sa faci multe chestii, dar e o diferenta intre cod bun si corect si cod inutilizabil (scris doar pt k merge). Si in plus, asta e intrebare luata din carte de C++ si raspunsul corect este cel pe care l-am zis eu.
Absolviti si voi o facultate in domeniu si discutam dup-aia
Daca de exemplu ai o matrice, cate foruri folosesti, 2? Astfel cu un float poti folosi un singur for, si sa ai linia in partea intreaga a unui float si coloana dupa virgula, iar iteratia sa o faci cu valoarea care iti convine, castigand timp, pentru ca nu mai intri in al doilea for si nu mai testez a doua conditie, nu?
Iata cateva variante:
Descarcati varianta potrivita: