Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Tremura toata, dar nu de la ro...

Renault Android

Recomandare bicicleta e-bike 20&#...

Bing-Content removal tool
 Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?

Wc Geberit

Routere detinute in trecut si in ...
 Teii din fața casei

E-Mail in serie prin Excel si Out...

Modul alimentare rulou/jaluzea ex...

Recuperare fișiere dupa form...
 Aplicatii stress test RAM

Asigurare auto hibrid

Asus B550M - PC-ul nu porneste di...

Tzanca Uraganu - Inconjurat de Fe...
 

Pointerii

- - - - -
  • Please log in to reply
86 replies to this topic

#37
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
#include <iostream>
using namespace std;
int sir[10] = {3, 4, 43, 65, 534, 2, 7, 55, 29, 10};
int start, stop;
void sumaSir(int sir, int start, int stop)
{
int suma=0;
for (; i<=stop; i++)
	suma+=sir[i];
cout << suma;
}
int main()
{
cin >> start >> stop;
functie (sir, start, stop);
return 0;
}


Am înțeles la ce te referi. Mă învățați să scriu cod pe care sa îl poată citi oricine, cu ușurință.

#38
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Bun, faci progrese.

Pasii urmatori:
  • Nu mai declara variabile globale
  • Returneaza-mi suma, n-o afisa pe ecran
  • Incearca sa-ti dai seama cum te pot ajuta pointerii sa ai nevoie de doar doua argumente pentru functie, in loc de 3.


#39
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
reaminstec problema de pe pagina precedenta

Folosind pointeri, (se cere) o functie ce calculeaza suma unui vector.
Creaza un vector de 10 elemente si cere-i functiei sa calculeze suma
doar a ultimelor 5 elemente.

#40
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
Multumesc!

View Postdani.user, on 18 decembrie 2017 - 17:34, said:

  • Nu mai declara variabile globale

Am inteles. De acum, declar variabilele in interiorul (functiei) main.


View Postdani.user, on 18 decembrie 2017 - 17:34, said:

  • Returneaza-mi suma, n-o afisa pe ecran

Asta inseamna ca in loc de cout << suma; din interiorul functiei, trebuie sa scriu return suma;, iar tipul de data a functiei sa devina int, nu?


View Postdani.user, on 18 decembrie 2017 - 17:34, said:

  • Incearca sa-ti dai seama cum te pot ajuta pointerii sa ai nevoie de doar doua argumente pentru functie, in loc de 3.

M-am gandit la ceva, insa nu stiu daca este corect. Am incercat sa transpun ideile in cod, dar am avut probleme. Asadar, uitati la ce m-am gandit:
  • Vectorul devine un pointer sub forma de vector
  • In loc de acel for, voi avea un while care va calcula suma, cat timp pointerul cu index curent (sa zicem) nu este NULL
  • Astfel, nu mai este nevoie de parametrul stop .

Ultima "varianta" de cod contine cateva greseli, insa am facut modificarile in graba, caci eram la sfarsitul pauzei de la liceu. Dupa toate schimbarile, mai putin partea cu pointeri, am ajuns la asta:

#include <iostream>
using namespace std;
int sir[10] = {3, 4, 43, 65, 534, 2, 7, 55, 29, 10};
int sumaSir(int sir[], int start, int stop)
{
	int suma=0;
	for (int i=start; i<=stop; i++)
		suma+=sir[i];
	return suma;
}
int main()
{
	int start, stop;
	cin >> start >> stop;
	cout << sumaSir (sir, start, stop);
	return 0;
}



#41
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007

View PostAnduIX, on 18 decembrie 2017 - 20:59, said:

In loc de acel for, voi avea un while care va calcula suma, cat timp pointerul cu index curent (sa zicem) nu este NULL

De ce ar deveni NULL?

#42
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
1) sirul ramane sir, pointerul iti spune unde incepe
2) cu ce bucla vrei tu ... dar unde scrie ca sirul se termina in NULL ?
3) vezi alta metoda, dat fiind ca inainte de a apela functia tu stii unde incepe sirul, unde se termina, si cate elemente din el ai nevoie

#43
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
M-am gândit mai bine și am realizat ca nu are cum sa fie NULL, fiindcă după blocul de memorie alocat ultimului element, exista un alt bloc de memorie, nealocat, dar cu o adresa anume. Deci NULL nu se poate.

Eu trebuie sa fac ca programul sa calculeze suma între doua puncte, dar sa am 2 parametri in loc de 3 pentru funcție, folosindu-mă de pointeri. Am înțeles bine cerința, nu?

Mi-ați putea da un indiciu privind ceea ce trebuie sa elimin din lista de parametri? Start și stop sunt date, deci nu trebuie eliminate din argumente. Fără sir nu se poate, deci nici eliminarea lui nu o văd drept un lucru bun.

E vorba de pointeri, mi-ați spus. Totuși, nu înțeleg cum i-as putea folosi astfel încât să scap de un parametru..

Sau trebuie sa tratez strict cazul in care vreau suma ultimelor x elemente? Mai sus, la ideea cu pointerul NULL care a căzut, m-am gândit ca îmi cereți ca programul sa rezolve numai acest caz.

#44
jegmihai

jegmihai

    Senior Member

  • Grup: Senior Members
  • Posts: 11,536
  • Înscris: 03.09.2013
Gândește-te la definiția de baza a unui pointer, și anume că acesta retine adresa unei variabile. Cum faci sa afli valoarea unui element a cărui adresa este reținută într-un pointer?

#45
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,189
  • Înscris: 24.02.2007
Ai de aflat care-i strictul necesar de informatie pe care o poti transmite functiei pentru a stii ce elemente sa adune (nu neaparat ultimele 5).

#46
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005

View PostAnduIX, on 18 decembrie 2017 - 21:47, said:

Sau trebuie sa tratez strict cazul in care vreau suma ultimelor x elemente? Mai sus, la ideea cu pointerul NULL care a căzut, m-am gândit ca îmi cereți ca programul sa rezolve numai acest caz.
hai s-o expunem altfel
cand eram tanc si ne jucam de-a v-ați ascunselea, numaram
o suta, doua sute, trei sute, .....

Quote

Eu trebuie sa fac ca programul sa calculeze suma între doua puncte[...]Am înțeles bine cerința, nu?
ai inteles bine ... care este cea mai simpla (rapida) metoda sa numeri pana la 10 ?

Edited by MarianG, 18 December 2017 - 22:04.


#47
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016

View Postjegmihai, on 18 decembrie 2017 - 21:51, said:

Gândește-te la definiția de baza a unui pointer, și anume că acesta retine adresa unei variabile. Cum faci sa afli valoarea unui element a cărui adresa este reținută într-un pointer?
Folosesc operatorul de dereferentiere, adică *p (dacă pointerul este “p”).


View Postdani.user, on 18 decembrie 2017 - 21:51, said:

Ai de aflat care-i strictul necesar de informatie pe care o poti transmite functiei pentru a stii ce elemente sa adune (nu neaparat ultimele 5).

Încă mă gândesc, căci este clar ca răspunsul “toate 3” nu este cel corect.

View PostMarianG, on 18 decembrie 2017 - 22:04, said:

ai inteles bine ... care este cea mai simpla (rapida) metoda sa numeri pana la 10 ?

Zic 1 și apoi 10? Sau...zic 1, 2, 3...pana la 10.
Înțeleg partea cu număratul la “De-a v-ați ascunselea”, căci așa era, însă nu am ideea in minte și nu înțeleg unde vrei sa ajungi..


Deci, am un șir. Am un start și un stop. Am nevoie atât de start, cât și de stop. Pe mine mă interesează suma între elementele care se afla între acel start și acel stop, inclusiv cele două.

La funcție, am trei argumente. Folosind pointeri, pot face astfel încât funcția sa aibă nevoie de numai doi parametri.

Pointerul stochează o adresă. Adresa șirului este, de fapt, adresa primului element din sir?


#48
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
de mai zici 1 ?

View PostAnduIX, on 18 decembrie 2017 - 22:38, said:

Pointerul stochează o adresă. Adresa șirului este, de fapt, adresa primului element din sir?
da
pentru ca vorbim de zone de memorie, cand trimiti adresa practic trimiti start

#49
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
Ah...zic direct 10.

#50
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
corect, cum ar trebui sa arate functia acum ?

#51
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
Lucrurile nu sunt clare la mine in cap.

Cel mai rapid mod de a numără pana la 10 este sa zici “10”. Pana la 30, zici “30”.

In cazul meu, trebuie sa zică direct start? Adică, șirul sa aibă prima valoare start?

E o învălmășeala in creierul meu acum. :D

#52
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
eu observ ca le intelegi
pana acum, inainte sa apelam functia, avem asa
un pointer la primul element al sirului
un pointer la un element de pe o pozitie arbitrara, numit start

ce ne mai trebuie ?

Edited by MarianG, 18 December 2017 - 23:11.


#53
AnduIX

AnduIX

    Junior Member

  • Grup: Members
  • Posts: 159
  • Înscris: 07.08.2016
O alta poziție arbitrară, numita stop?

Nu cred ca este nevoie de pointer la stop. Adică...așa văd eu lucrurile.

Dacă prima valoare este start, parcurgerea pana la stop se face element cu element. Nu mai este nevoie de pointer.

#54
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
Corect, nu este nevoie de pointer la stop.
Cum numim aceasta diferenta (cantitate) intre stop si start ?

Edited by MarianG, 18 December 2017 - 23:14.


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate