Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Consum ulei masina de tuns iarba...

"Moda" tinerilor care se ...

E.on energie aplicație intre...

Masina de tuns... buruieni
 Recomandare drona

Exista un soft care sa reia autom...

Identificare plante

Cum declari o variabila care nu s...
 Schimbare certificat de inmatricu...

Poligon auto București

nelamurire legata de pret la mode...

Hotel cu restaurant si Demipensiu...
 Croaziera in Mediterana de Vest 1...

Copilot are pica pe Vladimir Putin

MicroSoft Edge: Cum pun Google in...

Dashcam
 

problema c++ media aritmetica (matrici)

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

#1
tutuN_

tutuN_

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 21.09.2014
Salut!Am o problema de rezolvat.Am inceput o dar m am incurcat.
Cerinta: Se citeste o matrice cu maxim 10 linii si 10 coloane cu elemente numere intregi.Sa se calculeze media aritmetica a numerelor pozitive si pare.
Cum am inceput eu codul:
#include <iostream.h>
int main();
{
  int a[10][10], nr, S;
  float ma;
  unsigned m, n, i, j;
  cout << "m=";
  cin >> m;
  cout << "n=";
  cin >> n;
  for (i = 0; i < m; i++)
	for (j = 0; j < n; j++) {
	  cout << "a[" << i << "][" << j << "]=";
	  cin >> a[i][j];
	}
  S = 0;
  nr = 0;
  for (i = 0; i < m; i++)
	for (j = 0; j < n; j++)
	  if ((a[i][j] > 0))
		&&((a[i][j] % 2 == 0))nr = nr + 1;
  S += a[i][j];

Nu stiu cum sa continui.Unde ar trebui sa sa calculez ma?Inauntrul for-ului?
Multumesc!

Edited by dani.user, 13 September 2017 - 21:19.
formatare cod


#2
tester111

tester111

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016
#include <iostream.h>
int main();
{
  int a[10][10], nr = 0, S = 0;
  float ma;
  unsigned m, n, i, j;
  cout << "m=";
  cin >> m;
  cout << "n=";
  cin >> n;
  for (i = 0; i < m; i++) {
	for (j = 0; j < n; j++) {
	  cout << "a[" << i << "][" << j << "]=";
	  cin >> a[i][j];
	  if ((a[i][j] > 0))
		&&((a[i][j] % 2 == 0)) {
		  nr = nr + 1;
		  S += a[i][j];
		}
	}
  }
}


Aici poti cand citesti ca sa economisesti niste pasi,poti initializa la declaratie in c

Edited by dani.user, 13 September 2017 - 21:20.
code format


#3
tutuN_

tutuN_

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 21.09.2014
Nu prea inteleg ce vrei sa zici...

#4
tester111

tester111

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016

 tutuN_, on 13 septembrie 2017 - 18:27, said:

Nu prea inteleg ce vrei sa zici...
Daca mai treci prin for-uri o sa trebuiasca programul sa mai faca niste calcule care le puteai face mai devreme.Incrementarea lui i,j ,facutul de calcule,dupa care iar o incrementare inutila incetineste programul

#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,453
  • Înscris: 10.08.2005
Sigur,  incetineste programul.
bine ca citirea de la tastatura il accelereaza.
La cum este prezrntata problema, faptul ca este o matrice n-are importanta. Este un sir de numere.
Importante sunt numerele pozitive, pare. Intrebare: cum il tratati pe zero?

Edited by MarianG, 13 September 2017 - 18:44.


#6
tester111

tester111

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016

 MarianG, on 13 septembrie 2017 - 18:43, said:

Sigur,  incetineste programul.
bine ca citirea de la tastatura il accelereaza.
La cum este prezrntata problema, faptul ca este o matrice n-are importanta. Este un sir de numere.
Importante sunt numerele pozitive, pare. Intrebare: cum il tratati pe zero?
A decis sa nu il ia

#7
MarianG

MarianG

    be that as it may

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

 tutuN_, on 13 septembrie 2017 - 17:56, said:

Nu stiu cum sa continui.Unde ar trebui sa sa calculez ma?Inauntrul for-ului?
poti sa actualizezi la fiecare citire, sau la calculat o singura data la final.

#8
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
Hai sa te ajutam putin altfel decat ,,la scoala".

1. Se citeste o matrice .... , Sa se calculeze ceva ce nu are absolut nicio treaba cu conceptul de matrice. Deci, nu trebuie sa salvezi nicaieri "matricea". Tu o gestionezi cum vrei. Problem? Te certi putin cu cel care a formulat exercitiul (sau cu cel care are alte pretentii)

2. ... a numerelor pozitive si pare. Lucrezi modular (nu stiu in ce clasa esti):

bool condition(const int& number){
return ((number%2==0) && (number>0));
}


int variabila;
condition(variabila) iti returneaza true, daca numarul e par si

3. Faci media aritmetica.

Daca user-ul introduce un string in loc de numar? Incearca sa validezi si intrarile (chiar daca nu se cere).

#9
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
for(i=0; i<m; i++)
  for(j=0; j<n; j++)
	   {  if((a[i][j]>0))&&((a[i][j]%2==0))
		nr=nr+1;
		S+=a[i][j];
	   }



apoi imparti suma la nr elemente, cu float

#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,453
  • Înscris: 10.08.2005
ca idee
 float
medie_aritmetica(int suma, int numar_elemente)
{
  float result;
  result = suma / numar_elemente * 1.0;
  return result;
}

  Apoi daca tot evitati incetinirea programului
    
 if ((a[i][j] > 0)) &&
  ((a[i][j] % 2 == 0))
verifica fiecare conditie separat
    
  // strict pozitiv
  numar = array[linie][coloana];
if (numar > 0) {
  // multiplu de 2
  if ((numar % 2) == 0) {
	numar_elemente_valide += 1;
  }
}


Edited by MarianG, 15 September 2017 - 06:50.


#11
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,243
  • Înscris: 24.02.2007
Nu-i cazul sa ne gandim la "incetinirea programului" pentru asa o cerinta simpla. Daca se dorea accent pe asa ceva, nu s-ar fi populat o matrice de la bun inceput.

#12
javaEEDevOps

javaEEDevOps

    Member

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017

 tutuN_, on 13 septembrie 2017 - 17:56, said:

Salut!Am o problema de rezolvat.Am inceput o dar m am incurcat.
Cerinta: Se citeste o matrice cu maxim 10 linii si 10 coloane cu elemente numere intregi.Sa se calculeze media aritmetica a numerelor pozitive si pare.
Salut mai jos ai completarile mele la codul tau ca sa-ti mearga problema:
#include <iostream>
using namespace std;
int main(){
  int a[10][10] ;
  double ma = 0.0;
  unsigned int  nr = 0 ;
  int S = 0;
  unsigned int m = 0, n = 0;
  cout << "m="; cin >> m;
  cout << "n="; cin >> n;
 
  for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
		  cout << "a[" << i << "][" << j << "]=";
		  cin >> a[i][j];
		}
  }
  for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			if(a[i][j] != 0 && a[i][j] % 2 == 0 ) {
			  ++nr;
			  S += a[i][j];
			 }
		}
  }
  ma = S / (nr * 1.0);
cout<<"Media aritmetica este:" << ma;
}


Edited by javaEEDevOps, 15 September 2017 - 13:52.


#13
javaEEDevOps

javaEEDevOps

    Member

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017
#include <iostream>
using namespace std;
int main(){
int matrice[10][10] ;
double medieAritmetica = 0.0;
unsigned int totalElementePare = 0 ;
int sumaElementelorGasite =0;
unsigned int numarLiniiMatrice = 0, numarColoaneMatrice = 0;
cout << "numarLiniiMatrice="; cin >> numarLiniiMatrice;
cout << "numarColoaneMatrice="; cin >> numarColoaneMatrice;
for (int i = 0; i < numarLiniiMatrice; i++) {
	 for (int j = 0; j < numarColoaneMatrice; j++) {
		 cout << "elementMatrice[" << i << "][" << j << "]=";
		 cin >> matrice[i][j];
	 }
}
for (int i = 0; i < numarLiniiMatrice; i++) {
	 for (int j = 0; j < numarColoaneMatrice; j++) {
		 if(matrice[i][j] != 0 && matrice[i][j] % 2 == 0 ) {
			 ++totalElementePare;
			 sumaElementelorGasite += matrice[i][j];
			 }
	 }
}
medieAritmetica = sumaElementelorGasite/ (totalElementePare * 1.0);
cout<<"Media aritmetica este:" << medieAritmetica;
}


Edited by javaEEDevOps, 15 September 2017 - 17:09.


#14
nliviu

nliviu

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 23.04.2005
Fără stocarea datelor și cu validarea limitelor.
#include <iostream>
inline bool isPozitivPar(int numar)
{
return (numar > 0) && (0 == (numar & 1));
}
int main()
{
const uint nrLiniiMax = 10;
const uint nrColoaneMax = 10;
uint nrLinii = nrLiniiMax + 1;
uint nrColoane = nrColoaneMax + 1;
std::cout << "nrLinii trebuie sa fie <= " << nrLiniiMax << std::endl;
while (nrLinii > nrLiniiMax) {
	 std::cout << "nrLinii: ";
	 std::cin >> nrLinii;
}
std::cout << "nrColoane trebuie sa fie <= " << nrColoaneMax << std::endl;
while (nrColoane > nrColoaneMax) {
	 std::cout << "nrColoane: ";
	 std::cin >> nrColoane;
}
uint nrElementePozitivePare = 0;
int suma = 0;
int element;
for (uint i = 0; i < nrLinii; ++i) {
	 for (uint j = 0; j < nrColoane; ++j) {
		 std::cout << "matrice[" << i << "][" << j << "]=";
		 std::cin >> element;
		 if (isPozitivPar(element)) {
			 suma += element;
			 nrElementePozitivePare++;
		 }
	 }
}
double mediaAritmetica = suma / nrElementePozitivePare;
std::cout << "mediaAritmetica=" << mediaAritmetica << " (nrElementePozitivePare=" << nrElementePozitivePare
			 << ")" << std::endl;
return 0;
} // main


PS. De ce nu se păstrează indentarea între tag-urile code și /code? Fac eu ceva greșit?
PS2. În altă ordine de idei, "using namespace std;" nu mi se pare o idee bună.

Edited by nliviu, 15 September 2017 - 20:11.


#15
dani.user

dani.user

    Guru Member

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

 nliviu, on 15 septembrie 2017 - 20:03, said:

PS. De ce nu se păstrează indentarea ĂŽntre tag-urile code și /code? Fac eu ceva greșit?

Bug vechi, nereparat din varii motive.

 nliviu, on 15 septembrie 2017 - 20:03, said:

PS2. ĂŽn altă ordine de idei, "using namespace std;" nu mi se pare o idee bună.

Nu e o idee buna, dar e un progres fara de codul din primul post ce include iostream.h

Edited by dani.user, 15 September 2017 - 20:14.


#16
javaEEDevOps

javaEEDevOps

    Member

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017

 nliviu, on 15 septembrie 2017 - 20:03, said:

PS. De ce nu se păstrează indentarea între tag-urile code și /code? Fac eu ceva greșit?
PS2. În altă ordine de idei, "using namespace std;" nu mi se pare o idee bună.
Da asa este dpdv al optimizarii. Dar daca vorbim de optimizare de ce sa nu punem direct :
#include <iostream>
using std::cin;
using std::cout;

si apoi folosim cout si cin fara namespace-ul lor in fata.

LE: daca varientei tale de program ii dau o matrice 2 x2 cu toatele elementele 1 , programul iese direct
Nu ar trebui sa-mi zica ca media aritmetica esta nan (not an number) din moment ce  efectiv nu exista nici un numarpozitiv si par cu care se calculeze aceasta ?
Adica din moment ce nu exista nici un numar , programul ar trebui sa indice si efectul acestei stari asupra mediei si anume ca aceasta nu se poate calcula din moment ce nu exista nici un  motiv ca aceasta sa fie calculata ? ca drept urmare  avem starea not a number ? Nan care de fapt reprezinta o stare numeric echivalent cu NULL (adica nedifinita) .Cu alte cuvinte atunci cand n-am nici un numar , media aritmetica sa fie "nedefinita" ?

Edited by javaEEDevOps, 15 September 2017 - 20:53.


#17
nliviu

nliviu

    Junior Member

  • Grup: Members
  • Posts: 42
  • Înscris: 23.04.2005
Ai dreptate javaEEDevOps.

Eu prefer să nu folosesc "using namespace xxx".
Folosesc "using <namspace>/<library>/<library1>/<library2>" doar acolo unde <namspace>/<library>/<library1>/<library2> este foarte lung (cum ar fi dacă folosești boost).

Later edit:
Scuze. N-am verificat dacă nrElementePozitivePare este diferit de zero :(
#include <iostream>
inline bool isPozitivPar(int numar)
{
	return (numar > 0) && (0 == (numar & 1));
}
int main()
{
	const uint nrLiniiMax   = 10;
	const uint nrColoaneMax = 10;
	uint nrLinii   = nrLiniiMax + 1;
	uint nrColoane = nrColoaneMax + 1;
	std::cout << "nrLinii trebuie sa fie <= " << nrLiniiMax << std::endl;
	while (nrLinii > nrLiniiMax) {
		std::cout << "nrLinii: ";
		std::cin >> nrLinii;
	}
	std::cout << "nrColoane trebuie sa fie <= " << nrColoaneMax << std::endl;
	while (nrColoane > nrColoaneMax) {
		std::cout << "nrColoane: ";
		std::cin >> nrColoane;
	}
	uint nrElementePozitivePare = 0;
	int suma = 0;
	int element;
	for (uint i = 0; i < nrLinii; ++i) {
		for (uint j = 0; j < nrColoane; ++j) {
			std::cout << "matrice[" << i << "][" << j << "]=";
			std::cin >> element;
			if (isPozitivPar(element)) {
				suma += element;
				nrElementePozitivePare++;
			}
		}
	}
	double mediaAritmetica = 0;
	if (nrElementePozitivePare == 0) {
		std::cout << "Niciun numar pozitiv si par" << std::endl;
	} else {
		mediaAritmetica = suma / nrElementePozitivePare;
		std::cout << "mediaAritmetica=" << mediaAritmetica << " (nrElementePozitivePare=" << nrElementePozitivePare
				  << ")" << std::endl;
	}
	return 0;
} // main


Edited by nliviu, 15 September 2017 - 21:14.


#18
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
Cat timp nu foloseste nume/identificatori din spatiul de nume std, se iarta...

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

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