קוד בדיקה לעבודה 4 כולה

מנהלים: TA_nimrod, TA_Igor, TA_Adi

odedlei
הודעות: 32
הצטרף: 14:56 29/10/2009

קוד בדיקה לעבודה 4 כולה

שליחה על ידי odedlei » 13:34 23/12/2009

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

קוד: בחירת הכל

public class myTests {

     public static void main(String[] args)
 	{
		//points
		System.out.println("\n//POINTS");
		Point p1= new Point (4,3);
		Point p2= new Point (-3,-2);
		Point p3= new Point (-3,3);
		Point p4= new Point (4,-2);
		Point p5= new Point (3,2);
		Point p6= new Point (3,-1);
		Point p7= new Point (-1,1);	
		System.out.println("p1: "+p1);
		System.out.println("p2: "+p2);
		System.out.println("p3: "+p3);
		System.out.println("p4: "+p4);
		System.out.println("p5: "+p5);
		System.out.println("p6: "+p6);
		System.out.println("p7: "+p7);
		//rectangles
		System.out.println("\n//RECTANGLES");
		Rectangle r1= new Rectangle(p1,p2);
		Rectangle r2= new Rectangle(r1);
		Rectangle r3= new Rectangle(p3,p4);
		Rectangle r4= new Rectangle(p4,p3);
		Rectangle r5= new Rectangle(p1,p7);
		Rectangle r6= null;
		System.out.println("r1: "+r1);
		System.out.println("r2: "+r2);
		System.out.println("r3: "+r3);
		System.out.println("r4: "+r4);
		System.out.println("r5: "+r5);
		System.out.println("\n//Rectangle points getters");
		System.out.println("r1.p1: "+r1.getP1() + " expected: " +p1);
		System.out.println("r1.p2: "+r1.getP2() + " expected: " +p2);
		System.out.println("\n//Rectangle delta getters");
		System.out.println("r1.deltaX: "+r1.getDeltaX() + " expected: 7" );
		System.out.println("r1.deltaY: "+r1.getDeltaY() + " expected: 5" );
		System.out.println("\n//area");
		System.out.println("r1.area: "+r1.area() + " expected: 35" );
		System.out.println("r2.area: "+r2.area() + " expected: 35" );
		System.out.println("r5.area: "+r5.area() + " expected: 10" );
		System.out.println("\n//perimeter");
		System.out.println("r1.perimeter: "+r1.perimeter() + " expected: 24" );
		System.out.println("r2.perimeter: "+r2.perimeter() + " expected: 24" );
		System.out.println("r5.perimeter: "+r5.perimeter() + " expected: 14" );
		System.out.println("\n//equals");
		System.out.println("r1==r2 ? " + r1.equals(r2) + " expected: TRUE" );
		System.out.println("r1==r3 ? " + r1.equals(r3) + " expected: TRUE" );
		System.out.println("r1==r4 ? " + r1.equals(r4) + " expected: TRUE" );
		System.out.println("r1==r5 ? " + r1.equals(r5) + " expected: FALSE" );
		System.out.println("r1==r6 ? " + r1.equals(r6) + " expected: FALSE" );
		System.out.println("\n//contains");
		System.out.println("r1 contains p1? " + r1.contains(p1) + " expected: TRUE" );
		System.out.println("r1 contains p5? " + r1.contains(p5) + " expected: TRUE" );
		System.out.println("r1 contains (-7,7)?" + r1.contains(new Point (-7,7)) + " expected: FALSE" );
		System.out.println("\n//translate");
		r2.translate(p7);
		System.out.println("translated r2 " + r2 + " expected <(3,4),(-4,-1)>" );
		r2.translate(new Point(1,-1));
		//triangles
		System.out.println("\n//TRIANGLES");
	    Triangle t1= new Triangle(p1,p2,p3);
		Triangle t2= new Triangle(p2,p3,p1);
		Triangle t3= new Triangle(p3,p1,p2);
		Triangle t4= new Triangle(t1);
		Triangle t5= new Triangle(p5,p6,p7);
		Triangle t6= null;
		System.out.println("t1: "+t1);
		System.out.println("t2: "+t2);
		System.out.println("t3: "+t3);
		System.out.println("t4: "+t4);
		System.out.println("\n//Rectangle points getters");
		System.out.println("t1.p1: "+t1.getP1() + " expected: " +p1);
		System.out.println("t1.p2: "+t1.getP2() + " expected: " +p2);
		System.out.println("t1.p3: "+t1.getP3() + " expected: " +p3);
		System.out.println("\n//area");
		System.out.println("t1.area: "+t1.area() + " expected: 17.5" );
		System.out.println("t5.area: "+t5.area() + " expected: 6" );
		System.out.println("\n//perimeter");
		System.out.println("t1.perimeter: "+t1.perimeter() + " expected: ~20.6 " );
		System.out.println("\n//equals");
		System.out.println("t1==t2 ? " + t1.equals(t2) + " expected: TRUE" );
		System.out.println("t1==t3 ? " + t1.equals(t3) + " expected: TRUE" );
		System.out.println("t1==t4 ? " + t1.equals(t4) + " expected: TRUE" );
		System.out.println("t1==t5 ? " + t1.equals(t5) + " expected: FALSE" );
		System.out.println("t1==t6 ? " + t1.equals(t6) + " expected: FALSE" );
		System.out.println("\n//contains");
		System.out.println("t1 contains (0,0)? " + t1.contains(new Point()) + " expected: FALSE" );
		System.out.println("t1 contains null? " + t1.contains(r6) + " expected: FALSE");
		System.out.println("t1 contains p1? " + t1.contains(p1) + " expected: TRUE" );
		System.out.println("\n//translate");
		t2.translate(p7);
		System.out.println("translated t2 " + t2 + " expected <(-4,-1),(-4,4),(3,4)>" );
		t2.translate(new Point(1,-1));
		//interface methods
		System.out.println("\n//INTERFACE METHODS");
		Polygon poly1=((Polygon) r1.cloneMe());
		System.out.println("\n//contains polygon");
		System.out.println("r1 contains t5? "+ r1.contains((Polygon)t5) + " expected: true");
		System.out.println("r1 contains null? "+ r1.contains(r6) + " expected: false");
		System.out.println("\n//getVertices");
		Point[] Vertices1= r1.getVertices();
		Point[] Vertices2= t1.getVertices();
		for (int i=0; i<Vertices1.length ; i++){
			System.out.println("r1's vertice num " + (i+1) + ":" + Vertices1[i]);
		}
		System.out.println("");
		for (int i=0; i<Vertices2.length ; i++){
			System.out.println("t1's vertice num " + (i+1) + ":" + Vertices2[i]);
		}
		System.out.println("\n//scale");
		double scalefactor= 1.5;
		r1.scale(p7,scalefactor);
		System.out.println("scaled r1 "+ scalefactor +" times from point "+p7);
		Point[] Vertices3= r1.getVertices();
		for (int i=0; i<Vertices3.length ; i++){
			System.out.println("r1's scaled vertice num " + (i+1) + ":" + Vertices3[i]);
		}
		System.out.println("");
		t1.scale(p7,scalefactor);
		System.out.println("scaled t1 "+ scalefactor +" times from point "+p7);
		Point[] Vertices4= t1.getVertices();
		for (int i=0; i<Vertices4.length ; i++){
			System.out.println("t1's scaled vertice num " + (i+1) + ":" + Vertices4[i]);
		}
		System.out.println("\n//PolygonContainer");
		PolygonContainer PC1=new PolygonContainer();
		Point p11=new Point(-11,2);
		Point p12=new Point(-8,4);
		Point p21=new Point(-7,2);
		Point p22=new Point(-4,4);
		Point p31=new Point(0,2);
		Point p32=new Point(-3,4);
		Point p41=new Point(1,2);
		Point p42=new Point(4,4);
		Point p51=new Point(5,1);
		Point p52=new Point(3,5);
	    Point p61=new Point(6,4);
		Point p62=new Point(9,2);
		Point px=new Point (4,4);
		Rectangle pr1= new Rectangle(p11,p12);
		Rectangle pr2= new Rectangle(p21,p22);
		Rectangle pr3= new Rectangle(p31,p32);
		Rectangle pr4= new Rectangle(p41,p42);
		Rectangle pr5= new Rectangle(p51,p52);
		Triangle pr6= new Triangle(p61,p62,new Point(9,4));
        PC1.add(pr1);
        double sum1=PC1.sumArea();
        System.out.println("Area sum after adding pr1 "+sum1 +" expected: 6");
        PC1.add(pr1);
        double sum2=PC1.sumArea();
        System.out.println("Area sum after adding pr1 "+sum2+" expected: 12");
        PC1.add(pr2);
        double sum3=PC1.sumArea();
        System.out.println("Area sum after adding pr2 "+sum3+" expected: 18");
        PC1.add(pr3);
        double sum4=PC1.sumArea();
        System.out.println("Area sum after adding pr3 "+sum4+" expected: 24");
        PC1.add(pr4);
        double sum5=PC1.sumArea();
        System.out.println("Area sum after adding pr4 "+sum5+" expected: 30");
        PC1.add(pr5);
        double sum6=PC1.sumArea();
        System.out.println("Area sum after adding pr5 "+sum6+" expected: 38");
        PC1.add(pr6);
        double sum7=PC1.sumArea();
        System.out.println("Area sum after adding pr6 "+sum7+" expected: 41");
        int num1=PC1.numOfPolygons();
        System.out.println("number of Polygons in the container before removing: "+num1+" expected: 7");
        for (int i=0; i<10;i++){
               Polygon p9=PC1.polygonAt(i);
               System.out.println(i+"th polygon "+PC1.polygonAt(i)+" (before removing)");
        }
   //Constructor
        System.out.println("\n//constructor");
        PolygonContainer PC3= new PolygonContainer(PC1); 
        for (int i=0; i<PC3.numOfPolygons();i++){
               System.out.println("NEW POLYGON at place "+(i+1)+" is: "+PC3.polygonAt(i)+ " (before removing)");
        }  
   System.out.println("This test should have printed: pr1, pr1,pr2,pr3,pr4,pr5,pr6 by this order.");
        //getPolygonsOfAreaUpTo
        System.out.println("\n//getPolygonsOfAreaUpTo");
        int area=4;
        PolygonContainer PC2=PC1.getPolygonsOfAreaUpTo(area);
        int num3=PC2.numOfPolygons();
        System.out.println("polygons number with area up to "+area+ ": "+ num3+" expected: 1");
        for (int i=0; i<10;i++){
               Polygon p9=PC1.polygonAt(i);
               System.out.println(i+"th polygon "+PC2.polygonAt(i)+" (with area up to "+ area+ ")");
        }
        System.out.println("This test should have printed: only pr6 and 9 nulls.");
        //remove
        System.out.println("\n//remove");
        PC1.remove(px);   //expected to remove 5th and 6th polygons (pr4 & pr5)
        int num2=PC1.numOfPolygons();
        System.out.println("polygons number after removing: "+ num2+" expected: 5");
        for (int i=0; i<10;i++){
               Polygon p9=PC1.polygonAt(i);
               System.out.println(i+"th polygon "+PC1.polygonAt(i)+" (after removing)");
        }
        System.out.println("This test should have printed: pr1,pr1,pr2,pr3,pr6,null,null,null,null,null by this order.");
        double sum=PC1.sumArea();
        System.out.println("Area sum after removing "+sum +" expected: 27");
        //translate
        System.out.println("\n//translate");
        PC1.translate(p41);
        for (int i=0; i<10;i++){
               Polygon p9=PC1.polygonAt(i);
               System.out.println(i+"th polygon "+PC1.polygonAt(i)+" (after removing, after translating)");
        }
        System.out.println("This test should have printed: pr1, pr1,pr2,pr3,pr6,null,null,null,null,null by this order, after translating");
        
		
    }
    
}
נערך לאחרונה על ידי odedlei ב 16:52 24/12/2009, נערך 3 פעמים בסך הכל.

borisna
הודעות: 44
הצטרף: 19:15 07/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי borisna » 14:12 23/12/2009

יש לך טעויות!

בבדיקות של POLYGON CONTAINER אתה מריץ כל פעם לולאה מ 1 עד ... כאשר האינדקס של הצורה הראשונה במיכל צריכה להיות 0

אחרי שביצעת בדיקה לREMOVE ונשארו לך 5 צורות במיכל, איך בבדיקה של TRANSLATE אתה מצפה לקבל 7 צורות במיכל?

odedlei
הודעות: 32
הצטרף: 14:56 29/10/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי odedlei » 16:33 23/12/2009

סבבה, עידכנתי את הציפייה בבדיקת ה translate.
לגבי הרצת הלולאה - PolygonAt(n) אמורה להחזיר את האיבר שהוכנס בסדר ה nי... כלומר עבור האיבר הראשון n=1 השני n=2 וכן הלאה.. לכן הלולאה מתחילה מ i=1.
אם אני טועה אין לי בעיה לעדכן, ואפשר כמובן להעתיק את הקוד ולתקן רק את העניין הזה, אבל ככה הבנתי את זה.

borisna
הודעות: 44
הצטרף: 19:15 07/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי borisna » 16:36 23/12/2009

odedlei כתב:סבבה, עידכנתי את הציפייה בבדיקת ה translate.
לגבי הרצת הלולאה - PolygonAt(n) אמורה להחזיר את האיבר שהוכנס בסדר ה nי... כלומר עבור האיבר הראשון n=1 השני n=2 וכן הלאה.. לכן הלולאה מתחילה מ i=1.
אם אני טועה אין לי בעיה לעדכן, ואפשר כמובן להעתיק את הקוד ולתקן רק את העניין הזה, אבל ככה הבנתי את זה.
היה פה באיזה שרשור התייחסות של אחד המתרגלים לזה, והוא כתב שהצורה הראשונה זה n=0 וכך הלאה...

itayS
הודעות: 22
הצטרף: 14:34 12/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי itayS » 16:49 23/12/2009

תודה רבה על הבדיקה, לגבי הטעות השניה לאחר הremove אני מסכים עם זה שמעלי.. לגבי הטעות הראשונה, זה כבר יותר מבלבל כי מצד אחד אומרים שהצורה הראשונה נמצאת ב0 וכך הלאה.. ומצד שני נאמר בהגדרה של polygonAt שהיא מקבלת n ומחזירה את הצורה ה-n-ית במערך... כלומר לפי ההגיון שלי אם היא קיבלה 6 היא מחזירה את הצורה השישית... לא את הצורה במקום השישי(שהיא השביעית) לכן אני נוטה להסכים עם כותב הבדיקה וכנראה שהשינויים דווקא צריכים לחול על הpolygonAt שלך..
נערך לאחרונה על ידי itayS ב 17:05 23/12/2009, נערך פעם 1 בסך הכל.

itayS
הודעות: 22
הצטרף: 14:34 12/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי itayS » 16:56 23/12/2009

שימו לב שבדיקת הtranslate בסוף, כיוון שכתובתו של pr1 נמצא במערך בשתי מקומות שונים הוא הוזז פעמיים לפי הנקודה (1,2) אז על פניו נראה כאילו המקום הראשון הוזז ב(2,4) אך בעצם לא, והכל תקין :)

borisna
הודעות: 44
הצטרף: 19:15 07/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי borisna » 17:07 23/12/2009

itayS כתב:תודה רבה על הבדיקה, לגבי הטעות השניה לאחר הremove אני מסכים עם זה שמעלי.. לגבי הטעות הראשונה, זה כבר יותר מבלבל כי מצד אחד אומרים שהצורה הראשונה נמצאת ב0 וכך הלאה.. ומצד שני נאמר בהגדרה של polygonAt שהיא מקבלת n ומחזירה את הצורה ה-n-ית במערך... כלומר אם קיבלה 6 היא מחזירה את הצורה השישית... לא את הצורה במקום השישי(שהיא השביעית) לכן אני נוטה להסכים עם כותב הבדיקה וכנראה שהשינויים דווקא צריכים לחול על הpolygonAt שלך..
שוב... התשובה תלויה במה מוגדר האינדקס של הצורה הראשונה במיכל, וכמו שאמרתי קודם, אחד המתרגלים כתב פה שהאינדקס של הצורה הראשונה הוא n=0 לכן אם אתה קורא לפונקציה polygonAt עם n=6 הוא יחזיר את הצורה השביעית במעגל.

borisna
הודעות: 44
הצטרף: 19:15 07/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי borisna » 17:18 23/12/2009

רפי איפה אתה כשצריכים אותך??? :)

itayS
הודעות: 22
הצטרף: 14:34 12/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי itayS » 17:22 23/12/2009

כאשר n=6 הצורה ה-n-ית היא הצורה השביעית? משהו פה ממש ממש לא הגיוני.. אבל בכל זאת זה עניין שאפשר לתקן באלפית שנייה אם תהיה תשובה ממתרגל/מרצה..

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

borisna
הודעות: 44
הצטרף: 19:15 07/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי borisna » 17:27 23/12/2009

אז בוא ננסח שאלה ברורה לצוות הקורס ונקווה לתשובה :

אם אנחנו קוראים לפונקציה polygonAt(1 , הפונקציה צריכה להחזיר את הצורה הראשונה שנמצאת במיכל כלומר במקום ה-0 במערך, או את הצורה שנמצאת במקום ה-1 במערך כלומר השניה במערך?

itayS
הודעות: 22
הצטרף: 14:34 12/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי itayS » 18:25 23/12/2009

כתוב-
polygonAt(n ) // returns a copy of the n-th polygonin the container.

אז לדוגמא(אני משתמש באנגלית כדיי להדגיש כי הניסוח נשמע כמחייב משהו מסויים):

if n=seven, and we want the nth polygon:

n=seven

nth polygon = (n)th polygon = (seven)th polygon = seventh polygon

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

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

Fogpiskalo
הודעות: 59
הצטרף: 20:03 25/10/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי Fogpiskalo » 20:43 23/12/2009

סחטיין עליך. אבל יש לי בעיה:


System.out.println("t1 contains null? " + t1.contains(r6) + " expected: FALSE");

contains מקבל כארגיומנט נקודה, אי אפשר לשלוח לו מלבן, גם אם המלבן הוא null.. שגיאת קומפילציה

odedlei
הודעות: 32
הצטרף: 14:56 29/10/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי odedlei » 21:06 23/12/2009

אז אתה יכול פשוט להגדיר Point p=null; ואז לבצע את r1.contains(p) , אם זה יותר מסתדר לך הגיונית.

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

Raz.A
הודעות: 64
הצטרף: 22:00 26/10/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי Raz.A » 22:00 23/12/2009

המתרגל עדי סויסה ענה על השאלה polygonAt והיא יכולה לקבל 0 וזה הפוליגון הראשון.

itayS
הודעות: 22
הצטרף: 14:34 12/11/2009

Re: קוד בדיקה לעבודה 4 כולה

שליחה על ידי itayS » 22:13 23/12/2009

אוקיי.... אני אתקן את הקוד שלי.. זה נורא מוזר אבל

שלח תגובה

חזור אל “- מבוא למדעי המחשב 2010”