Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Inserare linie matrice folosind functii.
Last Updated: Dec 05 2019 11:56, Started by
ZeldakTime
, Dec 03 2019 14:01
·
0
#1
Posted 03 December 2019 - 14:01
Buna, am o problema de rezolvat:
Trebuie sa se scrie o functie inserareMedie, care primeste un numar N, M o matrice a care poate avea 51 de elemente maxim si un numar k. Functia va insera pe pozitia k o noua linie in matrice avand pe fiecare coloana un numar rational egal cu media aritmetica a elementelor de pe acea coloana iar parametrii N si m vor fi trimisi prin referinta. Functia nu va returna nimic de asemenea. Uitati ce am scris eu pana acum void inserareMedie(int &N, int &M, double mt[51][51], int k) { int i,j; double ma=0; double v[100]; for(j = 0;j <= M; j++) { for(i = 0;i <= N;i++) ma= ma + mt[i][j]; v[j]=ma/N; ma=0; } for(j = 0;j <= M; j++) { for(i = N; i >= k-1; i--) mt[i][j] = mt[i-1][j]; mt[k-1][j] = v[j]; } } int main() { int N = 2, M = 2; double mt[51][51]={{1,1}, {2,2}}; inserareMedie(N, M, mt, 1); return 0; } |
#2
Posted 03 December 2019 - 15:17
Ai probleme cu indexarea. Dacă începi de la 0, atunci condiția de oprire va fi < , nu <= în marea majoritate a cazurilor.
|
#3
Posted 03 December 2019 - 16:50
#4
Posted 03 December 2019 - 18:03
ZeldakTime, on 03 decembrie 2019 - 14:01, said:
Buna, am o problema de rezolvat: Trebuie sa se scrie o functie inserareMedie, care primeste un numar N, M o matrice a care poate avea 51 de elemente maxim si un numar k. Functia va insera pe pozitia k o noua linie in matrice avand pe fiecare coloana un numar rational egal cu media aritmetica a elementelor de pe acea coloana iar parametrii N si m vor fi trimisi prin referinta. Functia nu va returna nimic de asemenea. Uitati ce am scris eu pana acum void inserareMedie(int &N, int &M, double mt[51][51], int k) { int i,j; double ma=0; double v[100]; for(j = 0;j <= M; j++) { for(i = 0;i <= N;i++) ma= ma + mt[i][j]; v[j]=ma/N; ma=0; } for(j = 0;j <= M; j++) { for(i = N; i >= k-1; i--) mt[i][j] = mt[i-1][j]; mt[k-1][j] = v[j]; } } int main() { int N = 2, M = 2; double mt[51][51]={{1,1}, {2,2}}; inserareMedie(N, M, mt, 1); return 0; } // mt va fi // 1 1 // 1.5 1.5 // 2 2 // N va fi 3, M va fi 2 Pe exemplul acela asa trebuie sa dea. ZeldakTime, on 03 decembrie 2019 - 16:50, said:
Am testat si nu e de la asta.. for(j = 0; j <= M; j++)Variabila j va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 coloane vor fi accesate 3 coloane. Pentru N cu valoarea 2 și codul for(i = 0;i <= N;i++)Variabila i va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 linii vor fi accesate 3 linii. Din fericire în cazul tau specific, calculele ies cum trebuie pentru că restul elementelor din matrice sunt 0. Dar în general dacă greșești indexarea ori comiți erori de calcul ori să crapă programul. Acum, pentru codul și k cu valoarea 1 mt[k-1][j] = v[j];mt[k-1][j] este defapt mt[1-1][j] adică mt[0][j]. Dacă vrei ca noua coloană să fie inserată pe poziția k, atunci trebuie să fie mt[k][j]. Și trebuie să corectezi indexarea. for(i = N; i >= k-1; i--) mt[i][j] = mt[i-1][j];Când i va avea valoarea k, vom avea mt[k][j] = mt[k-1][j]. Când i va avea valoarea k-1, vom avea mt[k-1][j] = mt[k-2][j]. Ce se întâmplă dacă k este 1 sau 0? tavitu, on 04 decembrie 2019 - 11:23, said:
Pentru M cu valoarea 2 și codul for(j = 0; j <= M; j++)Variabila j va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 coloane vor fi accesate 3 coloane. Pentru N cu valoarea 2 și codul for(i = 0;i <= N;i++)Variabila i va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 linii vor fi accesate 3 linii. Din fericire în cazul tau specific, calculele ies cum trebuie pentru că restul elementelor din matrice sunt 0. Dar în general dacă greșești indexarea ori comiți erori de calcul ori să crapă programul. Acum, pentru codul și k cu valoarea 1 mt[k-1][j] = v[j];mt[k-1][j] este defapt mt[1-1][j] adică mt[0][j]. Dacă vrei ca noua coloană să fie inserată pe poziția k, atunci trebuie să fie mt[k][j]. Și trebuie să corectezi indexarea. for(i = N; i >= k-1; i--) mt[i][j] = mt[i-1][j];Când i va avea valoarea k, vom avea mt[k][j] = mt[k-1][j]. Când i va avea valoarea k-1, vom avea mt[k-1][j] = mt[k-2][j]. Ce se întâmplă dacă k este 1 sau 0? Edited by althea, 04 December 2019 - 13:45. |
#5
Posted 04 December 2019 - 13:50
ZeldakTime, on 03 decembrie 2019 - 18:03, said:
uitasem // mt va fi // 1 1 // 1.5 1.5 // 2 2 // N va fi 3, M va fi 2 Pe exemplul acela asa trebuie sa dea. Pentru M cu valoarea 2 și codul for(j = 0; j <= M; j++)Variabila j va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 coloane vor fi accesate 3 coloane. Pentru N cu valoarea 2 și codul for(i = 0;i <= N;i++)Variabila i va lua pe rând valoarea 0, valoarea 1 și valoarea 2. Deci în matricea ta care are doar 2 linii vor fi accesate 3 linii. Din fericire în cazul tau specific, calculele ies cum trebuie pentru că restul elementelor din matrice sunt 0. Dar în general dacă greșești indexarea ori comiți erori de calcul ori să crapă programul. Acum, pentru codul și k cu valoarea 1 mt[k-1][j] = v[j];mt[k-1][j] este defapt mt[1-1][j] adică mt[0][j]. Dacă vrei ca noua coloană să fie inserată pe poziția k, atunci trebuie să fie mt[k][j]. Și trebuie să corectezi indexarea. for(i = N; i >= k-1; i--) mt[i][j] = mt[i-1][j];Când i va avea valoarea k, vom avea mt[k][j] = mt[k-1][j]. Când i va avea valoarea k-1, vom avea mt[k-1][j] = mt[k-2][j]. Ce se întâmplă dacă k este 1 sau 0? Practic da corect dar pe site ul pe care o rezolv iau tot 0 puncte dintr un motiv sau altul Acesta este enuntul |
#6
Posted 04 December 2019 - 14:50
Ești sigur că poziția k înseamnă pe poziția k (adică dacă k = 1, pe poziția 1 într-o matrice cu indexarea de la 0, adică pe a doua poziție) și nu pe a k-a poziție (adică dacă k = 1, pe poziția 0 într-o matrice cu indexarea de la 0, adică pe prima poziție)?
PS @althea de s-a unit postul meu cu postul lui? |
#7
Posted 04 December 2019 - 14:52
tavitu, on 04 decembrie 2019 - 14:50, said:
Ești sigur că poziția k înseamnă pe poziția k (adică dacă k = 1, pe poziția 1 într-o matrice cu indexarea de la 0, adică pe a doua poziție) și nu pe a k-a poziție (adică dacă k = 1, pe poziția 0 într-o matrice cu indexarea de la 0, adică pe prima poziție)? PS @althea de s-a unit postul meu cu postul lui? |
#8
Posted 04 December 2019 - 22:35
cu adica numar ratinal egal cu media aritmetica?
media aritmetica este numar real |
#9
Posted 05 December 2019 - 11:56
ZeldakTime, on 04 decembrie 2019 - 13:50, said:
Să se scrie o funcție numită inserareMedie care primește un număr N, un număr M, o matrice mt care poate avea maxim 51 de linii și maxim 51 de coloane și un număr k. Funcția va insera pe poziția k o nouă linie în matrice, având pe fiecare coloană un număr rațional egal cu media aritmetică a elementelor de pe acea coloană. Parametrii N și M vor fi transmiși prin referință.. Acesta este enuntul Funcția trebuie să se numească inserareMedie. Funcția trebuie să primească doi parametri numere întregi transmiși prin referință, o matrice cu numere raționale și un număr întreg. Parametrii trebuie să fie în această ordine. La finalul funcției matricea trebuie să conțină o linie în plus conform enunțului Funcția nu va returna nimic |
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users