Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Pana unde poate merge o acuza5...

lipsa simtului realitatii in poli...

Arici in curte

Telefoane achizitionate de pe OLX
 Incalzire pardoseala slim (renova...

Probleme echitatie amatori

Scurgere chiuveta -> teava co...

Trigger Warning (2024)
 Pareri cartiere/zone in care ati ...

Care este culoarea normala de soia?

Comertul cu arcuri si arbalete

Masini pe benzina usor pretabile ...
 Am primit facturi dupa ce am renu...

Camere video, supraveghere curte....

Epilator care nu smulge puful

Realizare comanda pompa submersib...
 

[Tema]Numar divizori a lui d

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

#1
Oklah

Oklah

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 19.05.2014
Salut cum rezolv exercitiul asta ?

Se citește nu număr natural D. Să se afișeze numărul divizorilor naturali ai lui D. (toate numerele întregi >=1 și <=D) la care D se împarte exact.

Mi-a explicat profesorul prin email dar nu prea am inteles.
"De fiecare dată când găsești un număr i la care se împarte d, o altă variabilă (să zicem nrdiv) crește cu o unitate. i va lua toate valorile întregi de la 1 până la d inclusiv."
Codul pe care am incercat sa il fac :

#include <iostream>
using namespace std;
int i, d,nrdiv;
int main()
{
	cout << "d = " ;
	cin >> d ;
	d = 1;
	while (i >= 1)
	{
		if (i%d==0)
		cout <<i<<" ";
		nrdiv++;
	}
	return 0;
}



#2
EnachescuAlin

EnachescuAlin

    Active Member

  • Grup: Members
  • Posts: 1,008
  • Înscris: 08.07.2013
Pai ti-a zis profesorul sa iei de la 1 la D. Tu iei de la 1 pana la ... nimeni nu stie, pentru ca-ti intra in ciclu infinit. Ca sa fiu mai clar, iti trebuie o conditie dubla unde sa verifici daca i <= D. Tu il citesti pe d de la tastatura dar dupa iti atribui valoarea 1. Ce rost mai are citirea? Deci nu trebuie sa-i atribui valoarea 1. In acel if trebui sa pui d % i, pentru ca pe numarul d il imparti la i ca sa vezi daca i este divizor al lui d. Daca vrei si sa afisezi pe ecran si sa cresti cu o unitate pe nrdiv atunci trebuie sa folosesti { si }. Si ar mai trebui sa pui in afara while-ului un i++. Ca acum la tine i-ul initial e 0 si 0 ramane. Aaa, si vezi ca i-ul trebuie initial 1.

PS: nu mai folosi variabile globale.

#3
Oklah

Oklah

    Junior Member

  • Grup: Members
  • Posts: 31
  • Înscris: 19.05.2014

View PostEnachescuAlin, on 11 decembrie 2014 - 21:17, said:

Pai ti-a zis profesorul sa iei de la 1 la D. Tu iei de la 1 pana la ... nimeni nu stie, pentru ca-ti intra in ciclu infinit. Ca sa fiu mai clar, iti trebuie o conditie dubla unde sa verifici daca i <= D. Tu il citesti pe d de la tastatura dar dupa iti atribui valoarea 1. Ce rost mai are citirea? Deci nu trebuie sa-i atribui valoarea 1. In acel if trebui sa pui d % i, pentru ca pe numarul d il imparti la i ca sa vezi daca i este divizor al lui d. Daca vrei si sa afisezi pe ecran si sa cresti cu o unitate pe nrdiv atunci trebuie sa folosesti { si }. Si ar mai trebui sa pui in afara while-ului un i++. Ca acum la tine i-ul initial e 0 si 0 ramane. Aaa, si vezi ca i-ul trebuie initial 1.

PS: nu mai folosi variabile globale.

1. Daca pun d%i imi apare o erare in care zice ca , continutul este gresit.

[ https://i.imgur.com/KpKOGxS.jpg - Pentru incarcare in pagina (embed) Click aici ]

2. Cum adica sa folosesc {si} ?
3.i++ il pun inainte de return 0  si dupa } ?

#4
MarianG

MarianG

    be that as it may

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

Quote

De fiecare dată când găsești un număr i la care se împarte d, o altă variabilă (să zicem nrdiv) crește cu o unitate. i va lua toate valorile întregi de la 1 până la d inclusiv."
Spune-i ca desi afara ninge este caldura mare  iar matematic vorbind operatia de impartire (pe domeniul numerelor intregi) are 4 elemente,
deimpartit, impartitor, cat si rest
ca atare
toate numerele de la 1 la deimpartit vor fi impartitor iar
pentru orice cat al carui rest este zero vei incrementa un contor

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,269
  • Înscris: 24.02.2007
Observi ca nu-i dai nicaieri o valoare i'ului dar o citesti cat incape?
Lasa exemplele matematice si pune-te la punct cu bazele limbajului.

Edited by dani.user, 11 December 2014 - 21:46.


#6
EnachescuAlin

EnachescuAlin

    Active Member

  • Grup: Members
  • Posts: 1,008
  • Înscris: 08.07.2013

View PostOklah, on 11 decembrie 2014 - 21:41, said:


1. Daca pun d%i imi apare o erare in care zice ca , continutul este gresit.

[ https://i.imgur.com/KpKOGxS.jpg - Pentru incarcare in pagina (embed) Click aici ]

2. Cum adica sa folosesc {si} ?
3.i++ il pun inainte de return 0  si dupa } ?

1. Pai iti da eroare pentru ca tu acolo ai 1/0 si nu stie sa calculeze...
2. Adica sa folosesti { si } la if la fel cum ai folosit si la while. Iar intre { si } pui cele 2 instructiuni de sub if.
3. i++ il pui intre } de la if si } de la while.

#7
darky06

darky06

    New Member

  • Grup: Members
  • Posts: 11
  • Înscris: 11.04.2013
int d,i,nrdiv=0;
for(i=2;i<=n/2;i++)
   if(d%i==0)
   nrdiv++;
cout<<nrdiv;


PS: in cazul programului acestuia ti se calculeaza numarul divizorilor proprii... daca vrei sa pui si 1 si n la socoteala iei i de la 1 la n

Edited by darky06, 11 December 2014 - 23:15.


#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,516
  • Înscris: 10.08.2005
Si daca mergi de la 1 la radacina patrata iti crapa procesorul?

#9
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
for(i=1;i<=D;i++) if(D%i==0) nrdiv++;
cout<<nrdiv;


cel mai simplu mod.incearca sa intelegi asta si dupa mai lucram la detalii,numarul de la jumatate pana la el insusi nu mai are alti divizori ,deci putem pune o conditie i<=D/2 dar asta mai incolo.intelegi ce am scris mai sus?



iti cere numarul divizorilor la final,deci nu ii afisezi pe toti sau la fiecare pas,afisezi finalul,cati divizori a numarat nrdiv. pentru D=6 nrdiv = 4 (1,2,3,6).

Edited by VladBtz, 12 December 2014 - 16:42.


#10
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,516
  • Înscris: 10.08.2005
http://ro.wikipedia....
cat timp restul este zero, catul si impartitorul sunt divizori
deci numeri cate doi, pana la radacina patrata (partea ei intreaga), nu pana la jumatatea sa.
pentru deimparit egal cu sase, limita = sqrt(6) = 2
6 mod 1 = 0, 6/1=6 -- adaug 2 divizori 1, 6
6 mod 2 = 0, 6/2=3 -- adaug 2 divizori 2, 3

--------------------------------------

View PostVladBtz, on 12 decembrie 2014 - 16:40, said:

for(i=1;i<=D;i++) if(D%i==0) nrdiv++;
cout<<nrdiv;
cel mai simplu mod.incearca sa intelegi asta si dupa mai lucram la detalii,numarul de la jumatate pana la el insusi nu mai are alti divizori ,deci putem pune o conditie i<=D/2 dar asta mai incolo.intelegi ce am scris mai sus?
iti cere numarul divizorilor la final,deci nu ii afisezi pe toti sau la fiecare pas,afisezi finalul,cati divizori a numarat nrdiv. pentru D=6 nrdiv = 4 (1,2,3,6).
pentru deimparit egal cu sase, limita = 3
6 mod 1 = 0, 6/1=6 -- adaug 1 divizor 1
6 mod 2 = 0, 6/2=3 -- adaug 1 divizor 2
6 mod 3 = 0, 6/3=2 -- adaug 1 divizor 3

*modulo adica restul impartirii

Edited by MarianG, 12 December 2014 - 21:34.


#11
Nikki99

Nikki99

    New Member

  • Grup: Members
  • Posts: 16
  • Înscris: 10.12.2014
Daca  in loc de while folosesti for ,  calculatorul iti va cauta toate numerele din intervalul pe care il dai tu ... de exemplu de la 1 la D.. acestea fiind mai apoi divizorii de care ai tu nevoie.

MarianG , e corect cum i-a spus VladBtz . Asa se rezolva problema . Doar ca intr-adevar mai sunt cateva mici detalii...Gandeste-te ca structura aceea trebuie sa se repete ..poate e corecta si varianta cu sqrt , dar e mai complicata pentru nivelul problemei.Posted Image

#12
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014
Daca el e la inceput trebuie explicata cat de simplu cu putinta(gen nivel de clasa) ca sa inteleaga.Eu nu am decis sa " o complic" deocamdata cu i<=d/2 pentru ca vreau sa inteleaga ideea,multe ex la clasa se rezolva in modul asta. Marian i-o complici prea mult ,nu ii crapa procesorul dar daca deja e bagat in ceata,nu il scoti cu radacina patrata Posted Image)Uita-te ca nu stie bine cum se afiseaza,ce cere enuntul si unde se pun acoladele,chiar crezi ca o sa iti inteleaga ideea daca citeste de pe wiki?

Edited by VladBtz, 13 December 2014 - 10:19.


#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,516
  • Înscris: 10.08.2005
Despre ce structura vorbim? Afisezi doua numere in loc de unul, iar la final, dar chiar la final daca deimpartitul este egal cu catul faci o scadere. Daca imi scapa alt detaliu sunt numai ochi si urechi.

Edited by MarianG, 13 December 2014 - 12:13.


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

1 user(s) are reading this topic

0 members, 1 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