Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
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...

explicatie montaj breadboard

3 Doors Down - Kryptonite
 Semnalizati cand virati pe un dru...

Succesiune - mostenire apartament...

Donez Siofor de 1000mg ( diabet t...

Izolatie intre parter si etaj
 

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,383
  • Î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,383
  • Î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,882
  • Î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,383
  • Î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,189
  • Î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,189
  • Î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,882
  • Înscris: 22.04.2014
Cat timp nu foloseste nume/identificatori din spatiul de nume std, se iarta...

Anunturi

Second Opinion 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

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