Informatică, întrebare adresată de MadalinaMadutaa, 9 ani în urmă

Cerința
Se dă un șir cu n elemente, numere naturale. Determinați diferența în valoare absolută dintre numărul de valori pare din șir și numărul de valori impare din șir.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele șirului.

Date de ieșire
Programul va afișa pe ecran numărul C, reprezentând valoarea cerută.

Restricții și precizări
1 ≤ n ≤ 1000
cele n numere citite vor fi mai mici decât 1.000.000.000



Exemplu
Intrare

5
15 245 28 33 11
Ieșire

3
Explicație
Sunt 4 numere impare și un număr par în șir, deci diferența este 3.

Răspunsuri la întrebare

Răspuns de MrXDead
2
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "random"
#include "time.h"
#include "math.h"

using namespace std;

void main()
{
 double n;
 int *p;
 int nrPare = 0;
 int nrImpare = 0;

 do {

  cout << "Cate numere sa aiba sirul?";
  cin >> n;

  if (n < 1 || n > 1000) {
   cout << "Introduceti o valoare de la 1 la 1000!\n";
  }

 } while (n < 1 || n > 1000);

 srand(time(NULL));

p = new int [n];

 for (int i = 0; i < n; i++) {
  p [i]= rand();
  cout << p[i] << " ";

  if (p[i] % 2 == 0) {
   nrPare = nrPare + 1;
  }
  else {
   nrImpare = nrImpare + 1;
  }
 }

 cout << "\n\nNumarul C (diferenta in valoare absoluta dintre numarul de valori pare din sir si numarul de valori impare din sir) este:" << abs(nrPare - nrImpare);

 _getch();

delete p;
}

Ce am facut: in primul rand am inclus o multime de librarii :) aveam nevoie de ele pentru diferite functii pe care o sa le explic.

In primul rand, n este numarul de numere din sir, p este numarul care va fi verficat de fiecare data daca este par sau nu, nrPare si nrImpare sunt simple contoare sa luam in calcul numarul de numere pare si impare.

Apoi, am inclus un do while ca de la tastatura sa se introduca in numaru mai mic de 1000 si mai mare de 1.

Acum vin functiile noi: srand si rand pe care le observe imediat una dupa alta. rand() este o functie ce genereaza o valoare aleatorie, doar ca are in dezavantaj: aceasta produce aceleasi numere la fiecare compilare, deci nu total random. srand() da un seed lui rand() ca toate numerele sa fie total aleatorii. srand() primeste ca parametrii in seed, si acesta este singurul lucru mereu in miscare: timpul(time(NULL)), astfel seedul fiind mereu altul.
Am verificat paritatea numarului p folosind %(modulo) si am adaugat cate 1 in contorul respective paritatii lui p.

Apoi am folosit abs() , functie ce calculeaza valoarea absoluta a unui numar, in cazul acesta nrPare - nrImpare.

Sper ca am fost de folos, daca nu imi intelegi codul te rog sa imi zici :).

MadalinaMadutaa: voiam cu tablouri unidimensionale
MrXDead: ok nu e mare diferenta. Voi rescrie codul, dar trebuia sa precizezi in cerinta
MrXDead: acum p este adresa unui array alocat dinamic
MadalinaMadutaa: Dar nu dinamic ca nu am invatat asa
MrXDead: Altfel nu avem cum, avand in vedere ca nu stim dinainte variabila n. Putem sa punem un array fe 1000 de casute dar ar fi o risipa de spatiu daca nu am pune 1000 de numere
Alte întrebări interesante