זקוק להכוונה בתרגיל ב-C# - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

זקוק להכוונה בתרגיל ב-C#


gshhar

Recommended Posts

אוקיי אז התחלתי לרשום משהו, כרגע רק את קליטת המספרים הראשוניים אל תוך המערך.

אני מתחיל ב-3 בודק אותו מול מה שבמערך (המספר 2) סבבה לא מתחלק ומכניס אותו למערך.

המספר 4 כבר עושה לי בעיות כי הוא לא מתחלק ב-i1 אבל איך אני ממשיך ובודק אותו מול i0 ?



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace T206
{
class Program
{
static void Main(string[] args)
{
//define prime number array
int[] PrimeNum = new int[29];


//insert first prime number into array
PrimeNum[0] = 2;


//number of primes currently in the array
int nPrimes = 1;


//first munber to check
int num = 3;


for (int i = 0; i < nPrimes; i++)
{
if (num % PrimeNum[i] == 0)
{
num++;
}
else
{
PrimeNum[i] = num;
nPrimes++;
num++;
}
}


Console.ReadLine();
}
}
}

קישור לתוכן
שתף באתרים אחרים

  • תגובות 51
  • נוצר
  • תגובה אחרונה

שוב, אתה לא מפריד בין החלק שבודק אם המספר הוא ראשוני, והחלק שמכניס אותו למערך.

קודם כל תבדוק אם המספר הוא ראשוני.

אחר כך תכניס אותו למערך (למקום הנכון במערך, ליתר דיוק).

קישור לתוכן
שתף באתרים אחרים

כי הבעיה היא שאתה מכניס אותו לתוך המערך לפני שבכלל סיימת לבדוק אם הוא ראשוני.

הקוד שלך אומר כזה דבר:

נבדוק אם המספר 8 מתחלק ב-2. אם כן, אז הוא לא ראשוני - נגדיל את num ב-1 ונמשיך הלאה. אבל אתה לא ממשיך הלאה - אתה ממשיך בתוך אותה לולאה שאמורה לבדוק את המספר 8!

נניח שהיינו בודקים את 9. אז הוא לא מתחלק ב-2, האם זה אומר מיד שהוא ראשוני? לא, זה רק אומר שהוא לא מתחלק ב-2. אם הוא לא מתחלק בכל הראשוניים שקטנים ממנו, רק אז הוא בטוח ראשוני.

נתתי לך את הקוד שאמור לבדוק אם מספר הוא ראשוני, ובכל זאת מחקת חלקים מהקוד. איפה bool isPrime?

הבעיה העיקרית היא שאתה מערבב בין שתי לולאות שונות:

לולאה אחת צריכה לעבוד על מספר אחד, ולבדוק אם הוא ראשוני (ע"י מעבר על כל הראשוניים הקטנים ממנו).

לולאה שנייה היא זו שדואגת להכניס מספרים למערך - היא צריכה לעבור מספר מספר, ולבדוק מי מהם ראשוני (באמצעות הלולאה ראשונה).

קישור לתוכן
שתף באתרים אחרים

לא למדתי את השיטה של bool isPrime אז לא ידעתי בדיוק מה זה אומר

אבל עדיין לא הבנתי אם אני בודק את 5 למשל והוא ראשוני מה לעשות איתו אם אני לא מכניס אותו למערך ?

קישור לתוכן
שתף באתרים אחרים

"לא למדתי את השיטה של bool isPrime"?

אז תלמד. לא לומדים תנאים ולולאות לפני שלומדים את כל הטיפוסים הבסיסיים - int, double, char ו-bool.

אחרי שאתה יודע ש-5 הוא ראשוני אתה כן צריך להכניס אותו למערך. אבל רק אחרי שסיימת לבדוק אותו ואתה יודע בוודאות שהוא ראשוני!

קישור לתוכן
שתף באתרים אחרים

אתה צוחק עליי, נכון?

כבר כתבתי לך את הקוד הזה!

האלגוריתם שלך צריך להיות משהו כזה:

num = 2;
while (primes array is not full)
{

bool isPrime = (do something that checks if num is prime)

if (isPrime)
{
add num to the array
}
num++;
}

קישור לתוכן
שתף באתרים אחרים

אני יגיד לך מה אני לא מבין בו:

עד ה-BREAK הראשון בסדר.

בוא נגיד שאני מתחיל מהמספר 3 (כי 2 נתון לי שהוא ראשוני והוא כבר במערך), אם 3 מתחלק ב-2 הוא לא ראשוני אבל הוא לא מתחלק אז הוא כן ראשוני, עכשיו את הלולאה שלך של ה-FOR לא ממש הבנתי כאילו מה קורה עכשיו אם אני בודק כי את המספר 4 אני מבין שהוא נכנס ל-IF אז הוא לא ראשוני אבל אז אני אמור לקלוט את המספר 5 ואותו אני רוצה לבדוק מול 2 ומול 3 והקוד שלך רק בודק מספר מסויים, את הקוד הזה הבנתי איכשהו

קישור לתוכן
שתף באתרים אחרים

עשיתי את זה מקודם עם עם זה שהיה לי במערך 2,3,5,7 אז עשיתי קוד שאם אתה מכניס מספר הוא אומר לך אם הוא ראשוני או לא

פשוט בכיתה עדיין לא למדנו את מה שאתה רשמת לי עם ה-BOOL ואני רוצה להשתמש בכילים שנתנו לנו עד עכשיו וזה משגע אותי שאני לא מצליח, בכל מקרה זה מה שעשיתי מקודם:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;




namespace T206
{
class Program
{
static void Main(string[] args)
{
int[] PrimeNum = new int[5];
PrimeNum[0] = 2;
PrimeNum[1] = 3;
PrimeNum[2] = 5;
PrimeNum[3] = 7;
int count = 0;




Console.WriteLine("Enter Number: ");
int num = int.Parse(Console.ReadLine());




while (count < 4)
{
if (num % PrimeNum[count] != 0)
{
count++;
}
else
{
Console.WriteLine("The Number Is Not Prime Number");
Console.ReadLine();
return;
}
}




Console.WriteLine("The Number Is Prime Number");
Console.ReadLine();
}
}
}

קישור לתוכן
שתף באתרים אחרים

כי המורה שלי מלמד אותנו ככה והוא ישלים לנו את זה, אתה יודע איך זה - כל מורה והשיטה שלו ואותי בתור אחד שלא יודע תיכנות ורק התחיל זה מבלבל פתאום ללמוד תוך כדי דברים חדשים ואז בכיתה אני אראה שפתרו את זה בדרך אחרת.

בכל מקרה את התרגיל הזה אני אמור לפתור עם מערך, פשוט 2 נתון לי ראשוני אז להתחיל מ-3 ולבדוק אם הוא מתחלק בכל הראשוניים שמתחתיו ולהדפיס את 30 המספרים הראשונים הראשוניים.

קישור לתוכן
שתף באתרים אחרים

אין שום היגיון בדרך שהמורה שלך מלמד אותך. זה כמו ללמד כפל וחילוק לפני חיבור וחיסור. אבל לא משנה, אני לא אתווכח על זה.

בכל מקרה אתה לא חייב להשתמש ב-bool. אתה יכול סתם להגדיר int isPrime ואז לתת לו ערך 1 או 0 בהתאם לאם המספר ראשוני או לא. כלומר, משהו כזה:

      // Create the array
int[] PrimeNum = new int[30];
PrimeNum[0] = 2;
PrimeNum[1] = 3;
PrimeNum[2] = 5;
PrimeNum[3] = 7;
int nPrimes = 4; // number of primes currently in the array


int num = 8;
int isPrime = 1;

for (int i = 0; i < nPrimes; i++)
{
if (num % PrimeNum[i] == 0)
{
isPrime = 0;
break;
}
}

if (isPrime == 1)
{
Console.WriteLine("The Number Is a Prime Number");
}
Console.WriteLine("The Number Is Not Prime Number");
}

הקוד הזה רק בודק אם num (שכאן הוא 8 ) הוא ראשוני, ומדפיס את התוצאה. אתה צריך לדאוג להכניס או לא להכניס אותו למערך בהתאם, ולעטוף את זה בלולאה ראשית.

אמרתי את זה כבר קודם, ואני אומר את זה שוב - אתה צריך שתי לולאות. אחת שעוברת על המספרים, ואחת שבודקת אם מספר נתון הוא ראשוני.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...