Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Vecini ignoranti cu copil invatat...

Task scheduler

Bitdefender Box fabricat in Roman...

Ucraina-Romania
 Soft emulare imagini CD/DVD -free...

Ați avut pager?

Scad salariile! Lista firmelo...

black screen
 Recuperare casete video 8mm si 16...

Ultima problema a natiunii: O neg...

Problema Convertor DIGI / router ?

Problema la un hub pe DC++.
 Stick Orange TV

Dilema despre kit memorii RAM

This text is replaced by the Flas...

Consola pe duca?
 
Forumul Softpedia folosește "cookies" pentru a oferi utilizatorilor o experiență completă. Vezi detalii sau închide mesaj (x)

problema c++ media aritmetica (matrici)

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

#1
tutuN_

tutuN_

    Junior

  • Grup: Members
  • Posts: 82
  • Înscris: 21.09.2014
  • ID membru: 879,779
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

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016
  • ID membru: 944,781
#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

  • Grup: Members
  • Posts: 82
  • Înscris: 21.09.2014
  • ID membru: 879,779
Nu prea inteleg ce vrei sa zici...

#4
tester111

tester111

    Junior

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016
  • ID membru: 944,781

View PosttutuN_, 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

    Guru Member

  • Grup: Moderators
  • Posts: 17,066
  • Înscris: 10.08.2005
  • ID membru: 43,530
  • Locație: Iasi
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

  • Grup: Members
  • Posts: 121
  • Înscris: 10.02.2016
  • ID membru: 944,781

View PostMarianG, 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

    Guru Member

  • Grup: Moderators
  • Posts: 17,066
  • Înscris: 10.08.2005
  • ID membru: 43,530
  • Locație: Iasi

View PosttutuN_, 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

    Active Member

  • Grup: Members
  • Posts: 1,362
  • Înscris: 22.04.2014
  • ID membru: 860,606
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,679
  • Înscris: 24.09.2014
  • ID membru: 880,195
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

    Guru Member

  • Grup: Moderators
  • Posts: 17,066
  • Înscris: 10.08.2005
  • ID membru: 43,530
  • Locație: Iasi
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: Moderators
  • Posts: 22,481
  • Înscris: 24.02.2007
  • ID membru: 146,987
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

    Junior

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017
  • ID membru: 996,673

View PosttutuN_, 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

    Junior

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017
  • ID membru: 996,673
#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

  • Grup: Members
  • Posts: 34
  • Înscris: 23.04.2005
  • ID membru: 35,307
  • Locație: Bucuresti
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: Moderators
  • Posts: 22,481
  • Înscris: 24.02.2007
  • ID membru: 146,987

View Postnliviu, 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.

View Postnliviu, 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

    Junior

  • Grup: Members
  • Posts: 407
  • Înscris: 15.09.2017
  • ID membru: 996,673

View Postnliviu, 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

  • Grup: Members
  • Posts: 34
  • Înscris: 23.04.2005
  • ID membru: 35,307
  • Locație: Bucuresti
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

    Active Member

  • Grup: Members
  • Posts: 1,362
  • Înscris: 22.04.2014
  • ID membru: 860,606
Cat timp nu foloseste nume/identificatori din spatiul de nume std, se iarta...

Anunturi


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users