إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيف لي ان اقوم بحساب الـ Prime Numbers ?


12 رد (ردود) على هذا الموضوع

#1 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 10 May 2008 - 12:51 AM

لدي السؤال التالي :


Write a Pl/SQL program using While loop , which will accept integer from 1 to 00 and generate the prime numbers as showen in the following output :
The prime numbers from 1 to 50 are as follows :
1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47

أريد ان اعرف كيف لي ان اقوم بحساب Prime numbers بالإضافة إلى While loop

#2 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 May 2008 - 04:40 AM

السلام عليكم.

المشاركه التاليه متشابهه جداً مع ما تطلبه. حول ال basic loop إلى while loop.



أحمد يحيى


Oracle Apps Senior Technical Consultant


#3 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 10 May 2008 - 11:07 AM

How can I do it without using procedure ?


Write a Pl/SQL program using While loop , which will accept integer from 1 to 50 and generate the prime numbers as showen in the following output :
The prime numbers from 1 to 50 are as follows :
1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47



#4 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 May 2008 - 09:45 PM

How can I do it without using procedure


But as you can find out form your above task you should clue this via using a PL/SQL program which means you should create either a procedure or a function. So what do you need exactly? clarify this plz.

the second matter is that whether these prime numbers will be created as they are shown or they will be created according to a specific sequence? if so plz inform me about the mechanism of this sequence nd in turn I will try to answer this or anybody else.

THANKS...

أحمد يحيى


Oracle Apps Senior Technical Consultant


#5 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 10 May 2008 - 11:21 PM

السلام عليكم ...

لمعرفة هل الرقم برايم ام لا ستكون الفكرة كالتالي :


FOR i = 1 to 50
FOR j = 2 to (50-1)
IF mod (50,j)=0
THEN DBMS_output.put_line('It is not a prime ');
else
DBMS_output.put_line(i);

END FOR LOOP
END FOR LOOP




فكرة البرنامج ككل :


Declare

num number :=50;

Begin

DBMS_output.put_line('The prime numbers from 1 to 50 are as follows ');


while mod(num,1)=0 and mod (num,num)=0

loop

DBMS_output.put_line(num);

end loop;

end;
/




بالنسبة لسؤالك ,

these prime numbers will be created as they are shown

سيكون الناتج على الشاشة هو التالي فقط :



The prime numbers from 1 to 50 are as follows :
1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47



ولن نقوم بطلب ادخال قيمة من اليوزر لنحسب البرايم نمبرله , فقط سنحسب البرايم نمبر للعدد 50

تم التعديل بواسطة Computeryah, 10 May 2008 - 11:22 PM.


#6 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 May 2008 - 12:21 AM

وعليكم السلام.

كلامك صحيح وهو ده إللي أنا فهمته أول مره. بس إللي لغبطني رقم 2 إللي مكتوب في النتيجه. بالنسبه لسؤالك أنا فهمته خطأ . لو أردت أن تقول بهذا من خلال ال SQL فهذا الكود سوف يفي بما تريد:


select employee_id-99 "Number",decode(mod(employee_id-99,2),0,'PRIM','not prim') "Is prim ?"
from employees where employee_id-99<=50;

أحمد يحيى


Oracle Apps Senior Technical Consultant


#7 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 May 2008 - 12:31 AM

select employee_id-99 "Number",decode(mod(employee_id-99,2),0,'not prim','PRIM') "Is prim ?"
from employees where employee_id-99<=50;

أحمد يحيى


Oracle Apps Senior Technical Consultant


#8 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 11 May 2008 - 12:39 AM

طيب إذا اردنا عمل البرنامج باستخدام الـ while loop ?

كيف يمكننا ذلك ؟



// لم اقم بدراسة الـ function حتى الآن ... > اقصد decode ...

تم التعديل بواسطة Computeryah, 11 May 2008 - 12:39 AM.


#9 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 May 2008 - 01:29 AM

ال DECODE هي داله FUNCTION يتم دراستها من خلال منهج ال SQL وهي مهمه جداً لإستخدامها في التقارير.
بالنسبه لطلبك بإستخدام ال WHILE LOOP . إللي أعرفه أن ال PRIM NUMBERS هي الأعداد التي لا تقبل القسمه على 2
وهذا هو ال PROCEDURE :

create or replace procedure get_odd(top number)
is
counter number(10):=0;
total number(5):=0;
begin [b]while counter <top loop[/b]
if mod(counter,2)<>0
then
dbms_output.put_line(counter);
total:=total+1;
end if;
counter:=counter+1;
end loop;
dbms_output.put_line('The tatal is '||total);
end;


ولتنفيذه:

EXECUTE get_odd(60);


أتمنى أن أكون نفذت ما تريد وأي سؤال أنا مرحب به جداً...

أحمد يحيى


Oracle Apps Senior Technical Consultant


#10 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 11 May 2008 - 01:47 AM

رائع ...

ولكن عندما جربت تنفيذة للرقم 50 يظهر لي مع النواتج رقم 49 و 49 ليس برايم نمبز لانه يقبل القسمة على 7 ..


البرايم نمبر هي الأرقام التي لا تقبل القسمة إلا على نفسها او الرقم 1

تم التعديل بواسطة Computeryah, 11 May 2008 - 01:48 AM.


#11 Computeryah

Computeryah

    عضو

  • الأعضــاء
  • 40 مشاركة

تاريخ المشاركة 11 May 2008 - 02:21 AM

أظن اننا يجب ان نستخدم 2 loop

لنجعل البرنامج يقوم بعمل قسمه على جميع الأرقام


FOR i = 1 to 50
FOR j = 2 to (50-1)



#12 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 May 2008 - 01:10 PM

أولاً أخي أنا آسف لعدم التكمله معك أمس لإن جهازي فصل مني. وشكراً جداً لأنك فكرتني بمعنى ال prime number لأني كنت ناسيه خاااااااالص فجزاك الله خيراً. مظبوط جداً لازم 2 loop وهايكونوا nested loops . معلش أنا كنت فاهم ال prime غلط عشان كده أنا جاوبت غلط. هاعملها وأرد عليك.....

أحمد يحيى


Oracle Apps Senior Technical Consultant


#13 weloooo

weloooo

    مشرف

  • فريق الإشراف
  • 249 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 12 May 2008 - 12:12 AM

خد جملة ال select هذه تقوم بما تريد:

with t
as (select level+1 id from dual connect by level < &bound )
select id from t x1
where not exists
(
select 1 from t x2 where mod(x1.id , x2.id) = 0 and x2.id>1 and x2.id<ceil(x1.id/2)+1
) and x1.id<10000 and x1.id>0



للأمانه الموضوع منقول........

أحمد يحيى


Oracle Apps Senior Technical Consultant