עבור לתוכן

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

Featured Replies

פורסם
  • מחבר

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

אני מתחיל ב-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.4k
  • נוצר
  • תגובה אחרונה
פורסם

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

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

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

פורסם
  • מחבר

אבל למה לא להכניס ישר את המספר אם הוא ראשוני ?

אם אני לא מכניס אותו איפה אני ישמור אותו לאח"כ ?

פורסם

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

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

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

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

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

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

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

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

פורסם
  • מחבר

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

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

פורסם

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

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

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

פורסם
  • מחבר

כן אבל תוכל להראות לי איך אני בודק אותו גם עם 2 וגם עם 3 ?

אני לא מצליח לעשות לולאה כזו

יכול להיות שהראת לי כבר אבל פיספסתי

פורסם

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

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

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

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 והקוד שלך רק בודק מספר מסויים, את הקוד הזה הבנתי איכשהו

פורסם

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

פורסם
  • מחבר

עשיתי את זה מקודם עם עם זה שהיה לי במערך 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();
}
}
}

פורסם
  • מחבר

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

פורסם

איך הגעתם ללולאות בלי ללמוד מה זה bool?

שאלה לי אליך - האם נדרשתם לעבוד עם מערך, או שפשוט נדרשתם להדפיס את 30 הראשוניים הראשונים?

פורסם
  • מחבר

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

בכל מקרה את התרגיל הזה אני אמור לפתור עם מערך, פשוט 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 ) הוא ראשוני, ומדפיס את התוצאה. אתה צריך לדאוג להכניס או לא להכניס אותו למערך בהתאם, ולעטוף את זה בלולאה ראשית.

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

ארכיון

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

דיונים חדשים