IOPanel

חזור   IOPanel > דבר חופשי > תוכנה ומערכות הפעלה > תיכנות
עמוד ראשי הירשם חיפוש הודעות מהיום סמן פורומים כנקראו

תיכנות פורום בנושאי תיכנות , פיתוח אתרים , שפות תיכנות , אפליקציות סלולר וטאבלטים.

תוכנה ומערכות הפעלה : תיכנות

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

היי, אני רוצה ליבדוק אם כל הערכים במערך שווים , בצורה הכי יעילה שאפשר. ניסיתי אבל אני מקבל שגיאה שיש ...
תגובה
 
קישור חוזר הגדרות אשכול אפשרויות הצגת נושא
ישן 12-11-09, 20:34   #1 (קישור ישיר)
IO Member
 
תאריך הצטרפות: Aug 2007
הודעות: 435
שלח הודעה דרך MSN אל YosiAT
ברירת מחדל בדיקת האם כל הערכים במערך שווים

היי,
אני רוצה ליבדוק אם כל הערכים במערך שווים , בצורה הכי יעילה שאפשר.
ניסיתי אבל אני מקבל שגיאה שיש חריגה ביגלל [i+1]
קוד:
        int i = 0;
        boolean equal = true;
        while(i < rowsSum.length && equal)
        {
            i++;
            equal = (rowsSum[i] == rowsSum[i+1]);

        }
איך אפשר לתקן את זה?והאם יש פיתרון יותר יעיל?
YosiAT לא מחובר   הגב עם ציטוט
ישן 12-11-09, 21:35   #2 (קישור ישיר)
IO Folding Team
 
סמל האישי של static
 
תאריך הצטרפות: Dec 2007
הודעות: 2,111
ברירת מחדל

יותר יעיל.. לא עולה לי רעיון...
כמו שבחרת בלולאת WHILE יכלת לעשות את זה בלולאת FOR.
בכל מקרה אתה עובר על כל איבר במערך מקסימום פעמיים ובגלל שהגודל ידוע מראש הסיבוכיות זמן ריצה של כל העסק הזה הוא O(1) מה שאומר שזה הכי יעיל שאפשר.

אתה יכול לעשות את זה יותר אלגנטי ולהעיף את המשתנה EQUAL ולחסוך טיפונת זיכרון אבל זה ממש ממש ממש ממש לא קריטי

תנסה:
while(i < rowsSum.length-1 && equal)
__________________
cpu: i7 920 D0| mobo: Gigabyte Ga-EX58-UD4P | mem: Mushkin Black Line 12GB 1600MHz 9-9-9-24 | gpu: PNY 670GTX | case: Antec P190 | psu: Antec neo-link 1200w |
hd: 1TB Samsung F1 + Intel SSD 120Gb 330 , 320GB WD AAKS | display: Samsung T240 24" | keyboard: Logitech Wave | mouse: Logitech MX Revolotion + G700 | Speakers: Logitech Z-5500
static לא מחובר   הגב עם ציטוט
ישן 12-11-09, 21:42   #3 (קישור ישיר)
IO Member
 
תאריך הצטרפות: Aug 2007
הודעות: 435
שלח הודעה דרך MSN אל YosiAT
ברירת מחדל

עריכה :

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

1 2 3
3 2 1
2 1 3

סכום כל שורה 6,ולכן הפלט יהיה TRUE
אם לדוגמא יש

4 5 6
7 4 5
6 5 4

בשורה הראשונה יש 15
שורה שנייה 16
שורה שלישית 15
הפלט יהיה FALSE , וגם הלולאה תיפסק כבר בשורה השנייה.

אני מנסה לעשות עם WHILE לבינתיים וחסר לי התנאי שיפסיק בשורה השנייה במקרה למעלה -
קוד:
        int rowSum = 0;
        int currentRowSum = 0;
        int i = 0;
        while(i < magicSquare[1].length && rowSum == currentRowSum)
        {
            currentRowSum = 0;
            rowSum = 0;
            for(int j = 0; j < magicSquare[1].length ;j++)
            {
                currentRowSum = currentRowSum + magicSquare[i][j];
                System.out.print(magicSquare[i][j] + "  ");
            }    
            rowSum = currentRowSum;
            System.out.println("------------" + currentRowSum + "---------------" + rowSum);
            i++;
        }
עריכה:
הצלחתי לעשות את זה יעיל
קוד:
        int[][] magicSquare = {{2,9,4},{7,5,3},{6,1,8}};
        

        
        int rowSum = 0;
        int currentRowSum = 1;
        int i = 0;
        
        while(i < magicSquare[1].length  &&  rowSum / currentRowSum == i)
        {
            currentRowSum = 0;
            
            for(int j = 0; j < magicSquare[1].length ;j++)
            {
                currentRowSum = currentRowSum + magicSquare[i][j];
                
            }    
            
            
            rowSum = rowSum + currentRowSum;
            i++;
            System.out.println("i=" + i + ",rowSum=" + rowSum + ",currentRowSum=" + currentRowSum + ",trick = " + rowSum / currentRowSum);
        }

        if(i ==  magicSquare[1].length){
            System.out.println("equal");
        }else{
            System.out.println("!equal");
        }
הינה הקוד למעוניינים.

עריכה:
על מנת לקבל תוצאות נכונות יש לשנות את סוג המשתנים -currentRowSum ו rowSum למשתנה double

נערך לאחרונה על ידי YosiAT, 12-11-09 בשעה 22:40.
YosiAT לא מחובר   הגב עם ציטוט
ישן 13-11-09, 0:45   #4 (קישור ישיר)
IO Member
 
תאריך הצטרפות: Aug 2008
הודעות: 221
שלח הודעה דרך MSN אל Chosen Generl
ברירת מחדל

אני לא באמת יודע Java, אבל התחביר זהה לPHP,C,C# וכו', לכן כתבתי משהו קצת יותר יעיל:
קוד:
int[][] magicSquare = {{2,9,4},{7,5,3},{6,1,8}};
int firstRow = 0;
int curRow = 0;
boolean areRowsSame=true;

for(int i = 0; i < magicSquare[1].length; i++)
{
    curRow = 0;
    for(int j = 0; j < magicSquare[1].length; j++)
    {
        if(i == 0) firstRow += magicSquare[i][j];
        curRow += magicSquare[i][j];
    }
    if(firstRow != curRow) {
        areRowsSame = false;
        break;
    }
}

if(areRowsSame)
    System.out.println("equal");
else
    System.out.println("!equal");
__________________
שי בן משה - בונה אתרים
חותך אתרים, ומתכנת צד לקוח וצד שרת.
מסנגר, אימייל: shayfalador@gmail.com

חשמלאי מוסמך בנית אתרים
Chosen Generl לא מחובר   הגב עם ציטוט
ישן 13-11-09, 8:34   #5 (קישור ישיר)
IO Member
 
תאריך הצטרפות: Aug 2007
הודעות: 435
שלח הודעה דרך MSN אל YosiAT
ברירת מחדל

המורה שלי לא יקבל את זה ביגלל הBREAK.
YosiAT לא מחובר   הגב עם ציטוט
תגובה


הגדרות אשכול
אפשרויות הצגת נושא

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

vB code הינו פועל
סמיילים הינו פועל
קוד [IMG] הינו פועל
קוד HTML הינו כבוי
Trackbacksהינו פועל
Pingbacks הינו פועל
Refbacks הינו פועל

נושאים דומים
אשכול מפרסם האשכול פורום תגובות הודעה אחרונה
מה שווים המאווררים הגדולים ShadowK קירור אוויר 3 09-10-09 20:37
כרטיסי מסך במחיר חד פעמי וב12 תשלומים שווים NoaComp דילים חמים 13 22-09-09 20:56
מבדק שמוכיח כמה AMD שווים zztop מעבדי AMD ולוחות אם 19 30-04-09 14:51
איזה מעבד לקחת? הביצועים שווים את הכסף? lkpo14 מעבדי INTEL ולוחות אם 24 11-03-09 1:34
כרטיסי מסך ב-36 תשלומים שווים ללא ריבית NoaComp דילים חמים 15 08-08-08 14:50


כל הזמנים הם GMT +3. השעה כרגע היא 22:49.





מופעל על ידי: vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO
IOPanel.net © כל הזכויות שמורות