Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Pointerii
Last Updated: Dec 26 2017 23:57, Started by
AnduIX
, Dec 13 2017 23:14
·
0
#73
Posted 25 December 2017 - 11:58
Decat sa transmiti vectorul ca adresa 1000 (de exemplu), si apoi start ca 10, ce-ar fi sa trimiti vectorul direct ca 1010?
|
#74
Posted 25 December 2017 - 12:27
In cazul de fata, adresa primului element + sizeof(int)*start, nu?
|
#75
Posted 25 December 2017 - 13:56
Doar element + start. Adauga compilatorul automat sizeof-ul in calcul.
In concluzie, solutia finala este ... ? |
#76
Posted 25 December 2017 - 18:13
Le-am cam incurcat..
#include <iostream> using namespace std; int sumaSir(int* p, int nrElemente) { int suma=0, i=0; while (i<=nrElemente) { suma+=*p; p+=sizeof(int); i++; } return suma; } int main() { int sir[10] = {3, 4, 43, 65, 534, 2, 7, 55, 29, 10}, start, stop; cin >> start >> stop; int* p = &sir[0] + start; cout << sumaSir (p, stop-start); return 0; } |
#77
Posted 25 December 2017 - 18:23
1. Dacă începi cu i de la 0, trebuie să te oprești înainte de nrElemente, adică < nu <=.
2. Dacă p este pointer către int, atunci p += 1 mută pointerul p un singur element la dreapta. p += sizeof(int), în funcție de valoarea lui sizeof(int), care poate fi 2 sau 4, mută pointerul p 2/4 elemente la dreapta. Mai citește odată ce am scris aici, paragraful din mijloc, https://forum.softpe...4#entry22183340 Edited by tavitu, 25 December 2017 - 18:36. |
#78
Posted 25 December 2017 - 19:23
Ma gandeam ca i trebuie sa inceapa cu 0 in conditiile astea, caci daca start este 6 si stop este 8, de exemplu, va trebui sa faca suma a trei elemente, nu a doua elemente, cat este diferenta stop-start.
Acum totul este in regula, din cate vad. #include <iostream> using namespace std; int sumaSir(int* p, int nrElemente) { int suma=0, i=1; while (i<=nrElemente) { suma+=*p; p+=1; i++; } return suma; } int main() { int sir[10] = {3, 4, 43, 65, 534, 2, 7, 55, 29, 10}, start, stop; cin >> start >> stop; int* p = &sir[0] + start; cout << sumaSir (p, stop-start); return 0; } Edited by AnduIX, 25 December 2017 - 19:24. |
#79
Posted 25 December 2017 - 19:25
Acum rescrie funcția să folosească doar doi pointeri, start și stop.
|
#81
Posted 26 December 2017 - 13:31
Trebuie ca parametrii funcției sa fie amândoi pointeri? Mă gândeam ca folosesc un pointer numai la start și trec de la element la element, cât timp valoarea de la adresa respectiva este diferită de stop.
&sir[0] este același lucru ca &sir ? |
#82
Posted 26 December 2017 - 13:44
Da, ambii parametrii să fie pointeri. Operațiile de comparare sunt valide în cazul pointerilor, adresele, până la urmă sunt niște numere și pot fi comparate. &sir[0] este echivalent cu sir simplu fără &.
|
|
#83
Posted 26 December 2017 - 14:13
O noua problema pentru a intelege de ce folosirea pointerilor ajunge inevitabila:
Quote
Sa se scrie o functie ce primeste un sir de 10 milioane de numere naturale si returneaza suma celor mai mari 3 valori gasite in sir (sa zicem ca fiecare valoare nu pot depasi 1 mil sa nu existe overflow pe 32 bit). |
#84
Posted 26 December 2017 - 20:00
Este in regula?
#include <iostream> using namespace std; int sir[10] = {3, 4, 43, 65, 534, 2, 7, 55, 29, 10}; int sumaSir(int* pstart, int* pstop) { int suma=0; while (pstart <= pstop) { suma+=*pstart; pstart+=1; } return suma; } int main() { int start, stop; cin >> start >> stop; int* pstart = sir + start; int* pstop = sir + stop; cout << sumaSir (pstart, pstop); return 0; } |
#85
Posted 26 December 2017 - 21:26
Aproape. In C++ vei intalni foarte des stilul asta cu 2 pointeri (iteratori defapt, mai generic decat pointeri, dar seamana), dar, prin conventie, stop e mereu cu unul dupa ultimul element. Deci vei avea < stop, nu <= stop.
#include <algorithm> #include <iostream> int main() { int v[] = {3, 1, 4, 1, 5, 9}; int* ptrMinElement = std::min_element(v, v + 6); std::cout << "Min element: " << *ptrMinElement; } Edited by dani.user, 26 December 2017 - 21:39. |
#86
Posted 26 December 2017 - 22:21
In exemplul tău, funcția min_element se afla in headerul “algorithm”, nu?
Acea funcție are drept scop găsirea celui mai mic element din vector, parcurgând vectorul folosind pointeri, nu? |
#87
Posted 26 December 2017 - 23:57
Concentraza-te pe ce primeste functia, ce face cu elementele ne uitam mai tarziu.
|
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users