Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

Program determinare daca un nr. este prim

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

#1
Irys

Irys

    Member

  • Grup: Members
  • Posts: 331
  • Înscris: 26.12.2005
Hey. Am si eu o problema. Incerc sa scriu un program care sa stabileasca daca un nr. introdus de utilizator si mai mic ca 200 este sau nu prim. Uitati codul pe care l-am scris la apasarea butonului de "Calculeaza!"

Quote

Private Sub cmdCalcul_Click()
N = Val(tbZahl.Text)
If N >= 200 Then
MsgBox (" Numarul trebuie sa fie mai mic decat 200! ")
Else
B = N - 1
For A = 2 To B
Q = N / A
R = N - (A * Q)
Next A
  If R = 0 Then
  MsgBox ("Numarul nu este prim!")
  End
  End If
    If R <> 0 Then
    MsgBox ("Numarul este prim!")
    End
    End If
End If
End Sub

dar programul, desi nu da erori, imi vede toate numerele introduse ca fiind prime. Asa ca nu stiu ce sa-i mai fac.

A doua problema: am un Flex grid cu mai multe celule. Cum fac sa adun sau sa scad continutul numeric al toturor celulelor?
Imi dau seama ca sunt intrebari cam tampite, imi pare rau... :console:

Edited by Irys, 18 January 2006 - 16:27.


#2
RAZ

RAZ

    Member

  • Grup: Members
  • Posts: 1,227
  • Înscris: 15.10.2004
Foloseste Mod : (Used to divide two numbers and return only the remainder)

Private Sub cmdCalcul_Click()
  N = Val(tbZahl.Text)
	 If N >= 200 Then 
		MsgBox " Numarul trebuie sa fie mai mic decat 200! "
	Else
		If N Mod 2 = 0 Then
			MsgBox "Numarul  este prim!"
	   else
			MsgBox "Numarul nu este prim!"  
		End If
   End If

End Sub


#3
Irys

Irys

    Member

  • Grup: Members
  • Posts: 331
  • Înscris: 26.12.2005
Codul tau nu merge pentru ca exista si numere neprime care nu se impart la 2, cum ar fii multiplii de 3, de 11, de 7, si in genere multiplii de numere prime. Un numar prim este un nr care nu se imparte exact (fara rest) decat la 1 si la sine. Am incercat sa adaptez codul tau, dar tot nu merge si-mi vede toate numerele ca fiind neprime! :confused: Help!
Private Sub cmdCalcul_Click()
N = Val(tbZahl.Text)
If N >= 200 Then
MsgBox (" Numarul trebuie sa fie mai mic decat 200! ")
Else
B = N - 1
For A = 2 To B
R = N Mod A
Next A

  If R = 0 Then
  MsgBox ("Numarul nu este prim!")
  End
  End If
	If R <> 0 Then
	MsgBox (" Numarul este prim!")
	End
	End If
End If

Edited by Irys, 18 January 2006 - 18:38.


#4
sir.roko

sir.roko

    Member

  • Grup: Members
  • Posts: 343
  • Înscris: 20.09.2004
boolean prim(int n){
for(int i = 0; i < sqrt(n); i++)
   if(n%i == 0) return false;
return true;
}
tradu in vb .. ca nu stiu.

Edited by sir.roko, 18 January 2006 - 19:33.


#5
DarkDog

DarkDog

    Member

  • Grup: Members
  • Posts: 446
  • Înscris: 29.11.2004
nu stiu sintaxa vb deci ma bag ca musca in lapte  :confuzzled: variabila R trebuie sa o verifici de fiecare data in loop nu dupa ce iesi din loop(daca R este verificat in interiorul loopului scuze dar nu dupa cum am zis nu stiu sintaxa :( ). Inca ceva: ca sa vezi daca este prim este suficient ca B sa fie mai mare sau egal cu radical din n, nu trebuie sa te duci pana la n-1.

#6
#andrei

#andrei

    Active Member

  • Grup: Members
  • Posts: 1,172
  • Înscris: 31.03.2005

View PostIrys, on Jan 18 2006, 18:35, said:

Codul tau nu merge pentru ca exista si numere neprime care nu se impart la 2, cum ar fii multiplii de 3, de 11, de 7, si in genere multiplii de numere prime. Un numar prim este un nr care nu se imparte exact (fara rest) decat la 1 si la sine. Am incercat sa adaptez codul tau, dar tot nu merge si-mi vede toate numerele ca fiind neprime! :confused: Help!
Private Sub cmdCalcul_Click()
N = Val(tbZahl.Text)
If N >= 200 Then
MsgBox (" Numarul trebuie sa fie mai mic decat 200! ")
Else
B = N - 1
For A = 2 To B
R = N Mod A
Next A

  If R = 0 Then
  MsgBox ("Numarul nu este prim!")
  End
  End If
	If R <> 0 Then
	MsgBox (" Numarul este prim!")
	End
	End If
End If
nu stiu visual basic... dar ideea e cam asa
k= true;
for a =2 to sqrt(n)
  if n mod a = 0 then k = false

if k = true then "Numarul este prim"
                else "Numarul nu este prim"

#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
In 2ore - max 3 poti sa scrii numerele prime pe o foaie si eventual sa le introduci in visual basic
Private sub command1_click()
if text1="2" or text1="3" or Text1="un numar prim" then Label1.Caption = [Text1] & " este numar prim"
end if
End Sub


#8
#andrei

#andrei

    Active Member

  • Grup: Members
  • Posts: 1,172
  • Înscris: 31.03.2005

View PostMarianG, on Jan 18 2006, 20:41, said:

In 2ore - max 3 poti sa scrii numerele prime pe o foaie si eventual sa le introduci in visual basic

solutie mai proasta ca asta nu stiu daca exista  :deadtongue:

#9
MarianG

MarianG

    be that as it may

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

View Post#andrei, on Jan 18 2006, 21:32, said:

solutie mai proasta ca asta nu stiu daca exista  :deadtongue:
bun gaseste una mai buna. Totusi era intr-o carte la sfrasit numerele prime de la 1-1000.
sorry de offtopic

#10
Irys

Irys

    Member

  • Grup: Members
  • Posts: 331
  • Înscris: 26.12.2005
Ce-mi place ideea aia cu numerele prime pe care le sciu manual  :lol: Da stiu ca esti inventiv!!
Merci mult # andrei, solutia ta a fost cea mai utila (pacat ca am citit-o dupa ce am aflat de una singura cum e corect). Postez si aici cum am facut eu, poate le mai trebuie si altora.
If N >= 200 Or N <= 0 Then
  MsgBox (" Numarul trebuie sa fie mai mic decat 200! ")
Else
  For i = 2 To N/2
	If N Mod i = 0 Then
	  MsgBox (tbZahl.Text & " nu este numar prim")
	  tbZahl.Text = " "
	  Exit Sub
	End If
  Next i
  MsgBox (tbZahl.Text &"este numar prim")
End If
tbZahl.Text = " "
End Sub

Are cineva idee de chestia cu flex grid-ul? Spre exemplu cum fac sa adun doua casute dintr-un grid care sunt pe acelasi rand sa zicem.

Edited by Irys, 18 January 2006 - 23:34.


#11
nida

nida

    Junior Member

  • Grup: Members
  • Posts: 170
  • Înscris: 07.06.2005

View PostIrys, on Jan 18 2006, 23:34, said:

Ce-mi place ideea aia cu numerele prime pe care le sciu manual  :lol: Da stiu ca esti inventiv!!
Merci mult # andrei, solutia ta a fost cea mai utila (pacat ca am citit-o dupa ce am aflat de una singura cum e corect). Postez si aici cum am facut eu, poate le mai trebuie si altora.
If N >= 200 Or N <= 0 Then
  MsgBox (" Numarul trebuie sa fie mai mic decat 200! ")
Else
  For i = 2 To N/2
	If N Mod i = 0 Then
	  MsgBox (tbZahl.Text & " nu este numar prim")
	  tbZahl.Text = " "
	  Exit Sub
	End If
  Next i
  MsgBox (tbZahl.Text &"este numar prim")
End If
tbZahl.Text = " "
End Sub

Are cineva idee de chestia cu flex grid-ul? Spre exemplu cum fac sa adun doua casute dintr-un grid care sunt pe acelasi rand sa zicem.

1. pt optimizare fa-l pana la int(sqr(N))

2. Nu stiu vb dar :
a) daca este read-only il poti calcula in fraza select
B) daca vrei sa se updateze la modificarea celorlalte campuri ar trebui
- ori sa faci in dataset campuri calculate (banuiesc ca exista si in vb - :( )
- ori la un eveniment al celor 2 casute de pe grid de genul: on validate, on change, on exit etc sa calculezi valoarea celui de-al treilea ...

Edited by nida, 20 January 2006 - 18:10.


#12
Costel_Ureche

Costel_Ureche

    New Member

  • Grup: Members
  • Posts: 20
  • Înscris: 31.08.2005
Option Explicit

deseneaza  flexgrid=flxgrd

Private Sub Command1_Click()
   Dim Totale As Integer
   Dim ind As Long
   Dim idx As Long
'ma "invirt" in toate celulele si adaug valoarea gasita la total, ai nevoie de un text1 care sa afiseze rezultatul
   With flxGrd
      For ind = 0 To .Rows - 1
         For idx = 0 To .Cols - 1
            Totale = Totale + CInt(.TextMatrix(ind, idx))
         Next
      Next
   End With
   Text1.Text = CStr(Totale)
  
End Sub

Private Sub Form_Load()
   Dim ind As Long
   Dim idx As Long
  
  
   With flxGrd
      .FixedCols = 0
      .FixedRows = 0
      .Cols = 3 '3 coloane
      .Rows = 4 '4 rinduri
      
      'umplu cu valori aiurea
      For ind = 0 To .Cols - 1
         For idx = 0 To .Rows - 1
            .TextMatrix(idx, ind) = CStr(ind + idx)
         Next
      Next
      
   End With
End Sub

Sper ca ti-am fost de folos

#13
sapho

sapho

    Active Member

  • Grup: Members
  • Posts: 1,578
  • Înscris: 22.09.2002

View PostIrys, on Jan 18 2006, 23:34, said:

Ce-mi place ideea aia cu numerele prime pe care le sciu manual  :lol: Da stiu ca esti inventiv!!
pai evident este cea mai buna solutie. oricum, nu trebuie sa le scrii manual, le poti afla si cu un programel, faci un for de a 1 la 200 cu algoritmul pe care il ai deja si vezi care sunt rezultatele. cred ca nu sunt mai mult de 20-30 de numere. rezultatele le copiezi bine-mersi intr-un vector static si apoi pur si simplu de fiecare data cand apelezi functia ta doar verifici daca numarul se gaseste intrea alea cateva numere sau nu. e mai rapid oricum decat  algoritmul tau (nu stiu daca VB stie sa lucreze cu fisiere, dar banuiesc ca da. cu putina imaginatie poti scoate numerele prime intr-un fisier, scrise numai bine ca sa poti da copy-paste in fisierul sursa). din pacate nu e aplicabil decat pentru numere prime mici...

si mai rapid: faci un vector static de booleani cu 200 de de pozitii, il initializezi pe tot cu "false" si apoi faci v[i] = true numai daca i e prim. functia ta se reduce apoi la "return v[nr introdus]".

sorry, nu cunosc VB, dat cam asta ar fi ideea.

Edited by sapho, 25 February 2006 - 02:20.


#14
ioman87

ioman87

    Member

  • Grup: Members
  • Posts: 313
  • Înscris: 05.02.2006

View Postsapho, on Feb 25 2006, 02:15, said:

pai evident este cea mai buna solutie. oricum, nu trebuie sa le scrii manual, le poti afla si cu un programel, faci un for de a 1 la 200 cu algoritmul pe care il ai deja si vezi care sunt rezultatele. cred ca nu sunt mai mult de 20-30 de numere. rezultatele le copiezi bine-mersi intr-un vector static si apoi pur si simplu de fiecare data cand apelezi functia ta doar verifici daca numarul se gaseste intrea alea cateva numere sau nu. e mai rapid oricum decat  algoritmul tau (nu stiu daca VB stie sa lucreze cu fisiere, dar banuiesc ca da. cu putina imaginatie poti scoate numerele prime intr-un fisier, scrise numai bine ca sa poti da copy-paste in fisierul sursa). din pacate nu e aplicabil decat pentru numere prime mici...

si mai rapid: faci un vector static de booleani cu 200 de de pozitii, il initializezi pe tot cu "false" si apoi faci v[i] = true numai daca i e prim. functia ta se reduce apoi la "return v[nr introdus]".

sorry, nu cunosc VB, dat cam asta ar fi ideea.

mama masii de programare... ajungem sa luam nr prime din fisier  :confuzzled:

ia d'aici un algoritm foarte bun de generare a numerelor prime. E scris in pascal da' nu cred ca-i o mare problema sa-ti dai seama cam ce face fiecare instructziune:

type PRIMINTERVAL=2..100000; //intervalul pe care vrem sa calculam numerele prime

const MAXPRIM=100000; //numarul maxim pana la care cautam numere prime(tre sa fie cuprins in intervalul de mai sus)

var isprim:array[priminterval] of boolean; //tablou' (dupa calculare daca isprim[numar]=true numaru e prim)

procedure calcprime;
var i,j:priminterval;
	num:dword;
begin
FillChar(isprim,length(isprim),true); //initializeaza toate valorile din tablou cu true (deocamdata toate sunt prime)

//calculeaza numerele prime
for i:=2 to MAXPRIM do
 if isprim[i] then
  begin
	j:=2;
	num:=i*j;
	while num<=MAXPRIM do
	 begin
	   isprim[num]:=false;
	   inc(j); //i:=i+1
	   num:=i*j;
	 end;
  end;
//acu' cand vren sa shtim daca un nr e prim verificam daca isprim[nr_nostru]=true
end;


#15
sorinborodi

sorinborodi

    New Member

  • Grup: Members
  • Posts: 9
  • Înscris: 04.05.2006
http://mate.info.ro/...Info.aspx?ID=16
De aici se poate descarca o aplicatie care stabileste daca un nr. este prim, descompune numere in factori primi, afla divizorii unui nr., calculeaza cmmdc si cmmmc si altele.

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