THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: leukosaraphs! on November 27, 2016, 23:19:46 pm



Title: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on November 27, 2016, 23:19:46 pm
Ανέβηκε η πέμπτη εργασία του μαθήματος εδώ (https://elearning.auth.gr/mod/assign/view.php?id=311907). Happy programming

Programming Task 5


Κατάθεση εργασίας για βαθμολογία

  • Κατεβάζετε τα συνοδευτικά αρχεία της Άσκησης (code.zip)
  • Συμπληρώνετε τα τμήματα του κώδικα που λείπουν στο αρχείο, maze.cc.
  • Δοκιμάζετε τον κώδικα σε περιβάλλον Linux ή cygwin (https://www.cygwin.com/) τρέχοντας make clean; make
  • Εναλλακτικά, μπορείτε να χρησιμοποιήσετε όποιο IDE - περιβάλλον επιθυμείτε για την μεταγλώττιση του προγράμματος.
  • Ανεβάστε το αρχείο με τις δικές αλλαγές στο CMS (http://83.212.97.65:8888/)
  • Επαναλάβετε τα βήματα 2-4 μέχρι η βαθμολογία να σας είναι ικανοποιητική, ή παρέλθει ο χρόνος παράδοσης, ή βρείτε να κάνετε κάτι καλύτερο με το χρόνο σας.


Mazes!
In this assignment you will create a class to represent mazes. Mazes are a bit tricky because the most important things - the walls - sit between the cells. Let's say we have the following maze:

(https://s16.postimg.org/sl4ps2mfp/maze.png)
3 × 4 maze

The cells form a 2D grid, which we shall reference with (row, column) coordinates. Cell (0, 0) is the starting point, and cell (2, 3) is the ending point.

We can represent the maze with an array, but we also need to be able to store the walls somewhere. One approach for representing mazes is to add extra rows and columns between cells, where the walls themselves will be represented. Therefore, the above maze would be stored like this:

(https://s13.postimg.org/5ar0ff3nr/maze_expanded.png)
Representation of 3 × 4 maze

The green boxes are the cells themselves, and the yellow boxes represent the walls. The white boxes are unused in this representation, which may seem a bit wasteful, but we won't be creating giant mazes, so we'll pick a clear and slightly wasteful representation, rather than a confusing and extremely efficient one.

You can see that for a maze of size Nrows × Ncols, our representation requires a total of (2Nrows + 1)×(2Ncols + 1) elements. For our above example, with 3 rows and 4 columns, we would need (2 ⋅ 3 + 1)×(2 ⋅ 4 + 1) cells, or 7 × 9 cells.

C++ and Multidimensional Arrays

C++ doesn't have very good support for dynamically allocated multidimensional arrays; languages like Java are much better at this kind of thing. In C++, we typically allocate a 1-dimensional array with enough space for the total number of elements, and then map our 2D (or 3D, or whatever) coordinates into our 1D array. For example, given a 2D array with Nrows rows and Ncols columns:

  • The program can allocate a 1D array with Nrows × Ncols elements
  • An element at 2D position (row, col) can be mapped to row × Ncols + col

This mapping should make sense: for each row we are going to skip, we must move past Ncols cells to get to the next row. Of course, this is not the only way we can map 2D coordinates into the 1D array, but this is the typical approach for C and C++. It is called a row-major order. (A few other languages, like MATLAB and Fortran, use a column-major order for how they represent multidimensional arrays.)

Accessing Maze Cells and Walls

In order to provide a simple abstraction for people to use, we will implement a Maze class that uses cell coordinates to reference various aspects of the maze, but internally we will map cell coordinates into the "expanded representation" we use internally. We will call the coordinates in the expanded representation expanded coordinates.

You should be able to see how to map cell coordinates into expanded coordinates very easily. Given a maze with Ncell − rows × Ncell − cols cells, we can map the cell coordinates (rcell, ccell) into expanded coordinates (rexp, cexp) as follows:

  • rexp = 2rcell+ 1
  • cexp = 2ccell + 1
Given a particular cell, we will want to know if there is a wall on a particular side of the cell; we will use the cardinal directions "North", "East", "South" or "West" of the cell. Then, we can ask questions like:

  • Is there a wall to the west (left) of cell (1, 2) in the original maze? Yes.
  • Is there a wall to the north of cell (2, 3) in the maze? No.
Accessing the walls between cells is similarly straightforward:

  • To access the wall north of a given cell, compute the cell's expanded coordinates and subtract 1 from the row value.
  • To access the wall south of a given cell, compute the cell's expanded coordinates and add 1 to the row value.
  • To access the wall east of a given cell, compute the cell's expanded coordinates and add 1 to the column value.
  • To access the wall west of a given cell, compute the cell's expanded coordinates and subtract 1 from the column value.

Your Tasks

You will need to complete the implementation of the Maze class. There are quite a few member functions to implement, but you should not worry about this since the vast majority of them will end up being only a few lines long, at most. Only a few of these functions will actually require careful thought.

To help you know what you need to do, we are providing you with an initial version of maze.hh. This file contains the following:

  • A declaration of the Maze class, which includes all operations you must support. Feel free to add member functions if you wish (in particular, private helper functions), but don't change the public interface that the class specifies!
  • A MazeCell enumeration that specifies all the values that cells in the expanded representation of the maze can take on. You should not need to change this.
  • A Direction enumeration that specifies the cardinal directions that are used by the maze code. You should not need to change this.
  • A Location class that can be used to represent (row, column) locations. You shouldn't need to make any changes to this class.
The reason for the Location class is that C++ functions cannot return more than one value, but it is very helpful to be able to return a (row, col) value from various functions. Thus, we can package the row and column value into a Location object, and return that object from a function.

The required operations in the maze class are explained in the comments in the maze.hh header file. Feel free to ask for any clarifications.

Suggested Approach

You will need to dynamically allocate an array for the expanded representation of the maze using the heap. Since you are dynamically allocating memory, you will need to write a destructor to free the memory, and a copy-constructor and an assignment operator to handle copying and assignment correctly. (That is, you will need to perform a deep copy, not a shallow copy.) This is the Rule of Three (https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)) - if you implement a copy-constructor, assignment operator, or destructor for your class, you really should implement all three.

If you create simple abstractions for your class, you will find that your implementation goes much easier. For example, you need to implement these private helper functions in maze.cc:

 
Code:
 // Take 2D expanded coordinates and compute the corresponding 1D array index
  int getArrayIndex(const Location &loc) const;

  // Returns the expanded coordinates of the specified cell coordinates
  Location getCellArrayCoord(int cellRow, int cellCol) const;
  
  // Returns the expanded coordinates of the wall on a specific side of
  // a cell given in cell coordinates
  Location getWallArrayCoord(int cellRow, int cellCol,
                             Direction direction) const;
Then, your other functions can use these helpers to perform their tasks. By taking this approach, you minimize the number of places where you will have to write the tricky array-indexing operations that are so easy to get wrong. If you have bugs, you will only have to fix them in one place.

Use assertions liberally! Here are some ideas; if you see other places to use assertions, put them there too!

  • Check every set of incoming coordinates to be sure they are in the proper range.
  • Check row coordinates and column coordinates in separate assertions.
  • As indicated in the comments for getNeighborCell(), trip an assertion if someone tries to get a neighbor cell that is invalid.
Probably the hardest function to write will be the print() function. You can use the << stream-output operator on the ostream object, just as if it were cout. You may want to follow a structure like the following:

  
Code:
Output the number of cell-rows and cell-columns
  
  For each row r from 0 to numRows - 1:
      Output the walls above row r
      Output the cells in row r, along with the walls in between those cells
      
  Finally, output the walls below the last row

Testing

You can download the tester to exercise your maze code. It performs a pretty exhaustive battery of tests, so by the time your program passes all the tests, you should have a pretty high confidence that it works. You can compile and run the test program like this:
Code:
  make clean; make

All Done?

When you have finished your maze program, you should submit your completed maze.cc files on the CMS.

Edit: Μεγάλωσα το μέγεθος των εικόνων.
Edit2: Ανέβασα το διορθωμένο code.zip.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on November 28, 2016, 13:04:16 pm
Για όσους αρχίσουν την άσκηση προσέξτε στο maze.cc στην τελευταία συνάρτηση (print) κανονικά πρέπει να γράφει
Code:
void Maze::print(ostream &os) const

Βέβαια πρέπει να έχει ανέβει καινουργιο code.zip στο elearning που το έχει διορθωμένο αυτό το σημείο.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on November 28, 2016, 14:09:39 pm
Version 2 -- 28/11/2016 10:25
  • Διορθώθηκε το void Maze::print(ostream &os) const


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on November 30, 2016, 17:06:22 pm
Στην getArrayIndex(...) πρέπει να επιστρέφουμε τις τιμές των δύο συντεταγμένων ;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on November 30, 2016, 19:10:36 pm
Όταν φτιάχνεις τον πίνακα cells στην ουσία αναπαριστας έναν διδιάστατο πίνακα με τη βοήθεια ενός μονοδιάστατο. Ή getArrayIndex() πρέπει να μετατρέπει τις διδιαστατες συντεταγμένες σε μονοδιάστατης . Για παράδειγμα αν έχεις έναν πίνακα με 3 γραμμές και 4 στήλες τότε για να πάρεις τη μονοδιάστατη συντεταγμένη του κελιού που βρίσκεται στη δεύτερη γραμμή στην πρώτη στήλη θα πεις 2*μηκος_γραμμης +1. Το μονο που πρέπει να προσέχεις είναι ότι οι συντεταγμένες ξεκινάνε από το 0.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on November 30, 2016, 21:59:52 pm
Όταν φτιάχνεις τον πίνακα cells στην ουσία αναπαριστας έναν διδιάστατο πίνακα με τη βοήθεια ενός μονοδιάστατο. Ή getArrayIndex() πρέπει να μετατρέπει τις διδιαστατες συντεταγμένες σε μονοδιάστατης . Για παράδειγμα αν έχεις έναν πίνακα με 3 γραμμές και 4 στήλες τότε για να πάρεις τη μονοδιάστατη συντεταγμένη του κελιού που βρίσκεται στη δεύτερη γραμμή στην πρώτη στήλη θα πεις 2*μηκος_γραμμης +1. Το μονο που πρέπει να προσέχεις είναι ότι οι συντεταγμένες ξεκινάνε από το 0.
Μήκος γραμμής εννοείς πόσα cells υπάρχουν στον διδιάστατο μέχρι να φτάσουμε στο κελί που θέλουμε ;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: konsalex on November 30, 2016, 22:28:59 pm
Παιδια πως κάνουμε test απο Codeblocks πχ ή απο καθε ενα IDE?

Για παραδειγμα θελω να δω αν λειτουργει σωστα η πρωτη function int Maze::getArrayIndex(const Location loc) const


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on November 30, 2016, 23:50:46 pm
Μήκος γραμμής εννοείς πόσα cells υπάρχουν στον διδιάστατο μέχρι να φτάσουμε στο κελί που θέλουμε ;

Μήκος γραμμής είναι το μήκος των γραμμών του διδιαστατου πίνακα, δηλαδή στην περιπτωση μας 2*numCols+1 που είναι το συνολικό μήκος μιας γραμμής του expanded λαβυρίνθου.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 01, 2016, 00:00:59 am
Tips για την λύση της άσκησης

Αφού φορτωσετε τα αρχεία σε όποιο περιβάλλον κάνετε την εργασία (Linux, codeblocks, visual studio, κτλ)υπάρχει το πρόβλημα ότι δεν μπορεί να γίνει built το project (στα liux δεν ξέρω αν υπάρχει πρόβλημα) γιατί οι συναρτήσεις στο maze.cc δεν επιστρέφουν κάτι ενώ είναι τύπου int , Location κτλ. Αρα μπορείτε να βαλετε να επιστρέφουν κάποια "dummy values" , πχ return 0 στις int και αντίστοιχα στους άλλους τύπους τύπους. Επίσης εμένα με βοήθησε να δω το test-maze.cc και να φτιάχνω τις συναρτήσεις του maze.cc με τις σειρά που τις ελέγχει το πρώτο. Μόλις κάνετε σωστά τις συναρτήσεις που ελέγχει το κάθε τεστ θα σας βγάζει OK εκτελώντας το project

Happy Coding  :D :D


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 04, 2016, 01:20:21 am
Quote
CMS Programming Task 5
by Φλωρος Δημητριος - Saturday, 3 December 2016, 7:38 PM
 

Για την επιτυχή υποβολή του αρχείου, πρέπει να αλλάξετε την πρώτη γραμμή του αρχείου maze.cc σε

#include "ps5.h"

Αλλιώς θα σας βγάλει compile error. Για να δοκιμάζετε τον κώδικα τοπικά, χρησιμοποιείτε κανονικά

#include "maze.hh"

Version 3 -- 04/12/2016 13:22
  • Προστέθηκε διευκρίνιση για το παραπάνω (προσοχή, το ps5.h θέλει μόνο ένα h στο τέλος!).


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: JasonV97 on December 04, 2016, 02:55:48 am
Παιδιά να ρωτήσω, στη getNeighborCell, όταν δοθεί κάποιο από τα τετράγωνα που δεν έχει γειτονικό, τι υποτίθεται πρέπει να κάνουμε?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 04, 2016, 03:25:04 am
Παιδιά να ρωτήσω, στη getNeighborCell, όταν δοθεί κάποιο από τα τετράγωνα που δεν έχει γειτονικό, τι υποτίθεται πρέπει να κάνουμε?

Δεν χρειάζεται να κάνεις κάτι, αν θες όμως μπορείς να βάλεις μερικές assert στον κώδικά σου (π.χ. στην Maze::getArrayIndex() για να ελέγχονται όλες οι προσπελάσεις), ώστε να βγάζει error το πρόγραμμα και να μην κρασάρει.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: Egkelados on December 04, 2016, 23:39:19 pm
Στη συνάρτηση
Code:
MazeCell getCell(int cellRow, int cellCol) const;

και γενικά σε όλες όσες έχουν ορίσματα τα cellRow και cellCol, αυτά δίνονται σε cell-coordinates ή σε expanded cell-coordinates?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 04, 2016, 23:42:15 pm
Στη συνάρτηση
Code:
MazeCell getCell(int cellRow, int cellCol) const;

και γενικά σε όλες όσες έχουν ορίσματα τα cellRow και cellCol, αυτά δίνονται σε cell-coordinates ή σε expanded cell-coordinates?

Δίνονται σε καθαρά cell coordinates (εξ' άλλου, υποτίθεται πως τα expanded coordinates είναι θέμα της υλοποίησης της Maze, και ο κώδικας έξω από αυτήν δεν γνωρίζει για την εσωτερική αναπαράσταση των κελιών και των τοίχων, οπότε όλες οι public συναρτήσεις καλούνται με τις απλές συντεταγμένες του κελιού).


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: Egkelados on December 04, 2016, 23:43:59 pm
Ευχαριστώ πολύ για τη διευκρίνηση!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 05, 2016, 00:22:49 am
Πως μπορούμε να τρέξουμε το test maze σε περιβάλλον visual studio για να ελέγχουμε το κώδικα;Απο τη στιγμή που δεν υπάρχει εκτελέσιμο.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: annakom on December 05, 2016, 01:12:06 am
για όσους δουλεύουν σε codeblocks σε windows για να διαβάζει τους κώδικες- να τους κάνει built- το πρόγραμμα καλό θα ήταν να προσθέσουν τις #include<stdlib.h>  και #include <stdio.h> προτού ξεκινήσουν


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: KG8 on December 05, 2016, 13:25:42 pm
Μήπως μπορεί κάποιος να μου πει τι τύπο επιστρέφει η συνάρτηση:

MazeCell Maze::getCell(int cellRow, int cellCol) const

Γιατι δε μπορώ να κάνω build το αρχείο και να τεστάρω τον κώδικα


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 05, 2016, 13:27:09 pm
Γνωρίζει κανείς γιατί μου πετάει οτι δεν υπαρχει το NORTH,EAST κτλ όταν εκτελώ την εντολή
 if (direction == NORTH) {
            .........
}

Και γενικα για τη κλάση enum Direction τα στοιχεια της τι τα θεωρούμε ;;;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 05, 2016, 13:33:27 pm
Γνωρίζει κανείς γιατί μου πετάει οτι δεν υπαρχει το NORTH,EAST κτλ όταν εκτελώ την εντολή
 if (direction == NORTH) {
            .........
}

Και γενικα για τη κλάση enum Direction τα στοιχεια της τι τα θεωρούμε ;;;

το enum θετει το καθε στοιχειο του block με 0,1, ... etc , αρα μην γραφεις north αλλα βαλε 0,1...


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: afro on December 05, 2016, 13:49:20 pm
Μήπως μπορεί κάποιος να μου πει τι τύπο επιστρέφει η συνάρτηση:

MazeCell Maze::getCell(int cellRow, int cellCol) const

Γιατι δε μπορώ να κάνω build το αρχείο και να τεστάρω τον κώδικα
Η συναρτηση επιστρέφει τύπο MazeCell , έχει οριστεί στο maze.hh ως enumeration  που παίρνει τιμές VISITED,WALL,EMPTY.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 05, 2016, 14:20:47 pm
Πως μπορούμε να τρέξουμε το test maze σε περιβάλλον visual studio για να ελέγχουμε το κώδικα;Απο τη στιγμή που δεν υπάρχει εκτελέσιμο.
Φρόντισε να υπάρχουν μέσα στο project σου στο visual studio και τα 5 αρχεία του code.zip (3 source files & 2 header files - και αν ακόμα διαμαρτύρεται ότι δεν βρίσκει τα header files, κάν' τα αντιγραφή στο φάκελο με τα αρχεία .cc)
Για το εκτελέσιμο είναι υπεύθυνο το test-maze.cc, επειδή εκεί μέσα βρίσκεται η main() που τρέχει όλα τα τεστ για τον κώδικά σου.

Μήπως μπορεί κάποιος να μου πει τι τύπο επιστρέφει η συνάρτηση:

MazeCell Maze::getCell(int cellRow, int cellCol) const

Γιατι δε μπορώ να κάνω build το αρχείο και να τεστάρω τον κώδικα
Θα σου συνιστούσα να ξοδέψεις χρόνο ώστε να καταφέρεις να κάνεις build, γιατί είναι αρκετά σημαντικό να ελέγχεις τον κώδικά σου και να μπορείς να δεις πού ακριβώς έχει πρόβλημα.

Γνωρίζει κανείς γιατί μου πετάει οτι δεν υπαρχει το NORTH,EAST κτλ όταν εκτελώ την εντολή
 if (direction == NORTH) {
            .........
}

Και γενικα για τη κλάση enum Direction τα στοιχεια της τι τα θεωρούμε ;;;
Εκτός από αυτό που είπε ο leukosaraphs! πιο πάνω, μπορείς αντί για π.χ. NORTH να γράψεις Direction::NORTH, αφού το NORTH δεν υπάρχει από μόνο του σαν τύπος, αλλά ανήκει στην Direction.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 05, 2016, 15:14:09 pm
Φρόντισε να υπάρχουν μέσα στο project σου στο visual studio και τα 5 αρχεία του code.zip (3 source files & 2 header files - και αν ακόμα διαμαρτύρεται ότι δεν βρίσκει τα header files, κάν' τα αντιγραφή στο φάκελο με τα αρχεία .cc)
Για το εκτελέσιμο είναι υπεύθυνο το test-maze.cc, επειδή εκεί μέσα βρίσκεται η main() που τρέχει όλα τα τεστ για τον κώδικά σου.

Το πρόβλημα παραμένει..καμιά άλλη ιδέα γιατί δεν μπορεί να γίνει build το test-maze.cc;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 05, 2016, 16:59:47 pm
Μήπως μπορεί κάποιος να μου πει τι τύπο επιστρέφει η συνάρτηση:

MazeCell Maze::getCell(int cellRow, int cellCol) const

Γιατι δε μπορώ να κάνω build το αρχείο και να τεστάρω τον κώδικα

Και εγω εχω το ίδιο θέμα και δεν ξέρω καθόλου τι θελει.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 05, 2016, 19:47:20 pm
Το πρόβλημα παραμένει..καμιά άλλη ιδέα γιατί δεν μπορεί να γίνει build το test-maze.cc;

Τι error βλέπεις;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 05, 2016, 20:38:16 pm
Λεει οτι και η Mazecell και η Direction δεν ειναι κλασεις.!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 05, 2016, 20:55:51 pm
Τι error βλέπεις;

Το error που εμφανίζεται.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 05, 2016, 21:07:16 pm
Αυτο ειναι το ερορ μου


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 05, 2016, 22:27:46 pm
Το error που εμφανίζεται.
Πρέπει να αντιγράψεις τα 2 αρχεία .hh από τον φάκελο include στον φάκελο src. Εναλλακτικά, αν δεν θες να πειράζεις αρχεία και φακέλους, μπορείς μέσα από το Visual Studio να πας στο Project > Properties και να βάλεις τον φάκελο στα Additional Include Directories:
(https://i.imgur.com/t4MCQ2Y.png) (https://i.imgur.com/t4MCQ2Y.png)

Αυτο ειναι το ερορ μου
Δεν πρέπει απλώς να τρέχεις τα αρχεία, αλλά χρειάζεται να δημιουργήσεις νέο project στο Dev-C++, με όλα τα .hh και .cc αρχεία μέσα, ώστε να τα κάνει compile όλα μαζί και να βρει τις κλάσεις που είναι ορισμένες στο maze.cc και maze.hh.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: mprizou on December 05, 2016, 22:57:14 pm
στην clearWall το Mazecell γινεται empty η visited?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 05, 2016, 23:09:31 pm
στην clearWall το Mazecell γινεται empty η visited?
Το κελί δίπλα από τον τοίχο μένει όπως ήταν, και το MazeCell που αναπαριστά τον τοίχο γίνεται EMPTY.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: mprizou on December 05, 2016, 23:16:27 pm
με την προϋποθεση οτι ειναι οντως wall το γειτονικο,αλλιως δεν γινεται τιποτα,σωστα?
ευχαριστω πολυ!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 05, 2016, 23:42:47 pm
με την προϋποθεση οτι ειναι οντως wall το γειτονικο,αλλιως δεν γινεται τιποτα,σωστα?
ευχαριστω πολυ!
Δεν χρειάζεται να κάνεις έλεγχο, εφ' όσον η clearWall δέχεται ένα "κανονικό" κελί για όρισμα, ο γειτονικός τοίχος θα είναι ή "άδειος" ή "γεμάτος" τοίχος :)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 06, 2016, 01:17:32 am
Μήπως ξέρει κάποιος γιατί μου πετάει αυτό το error???


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 06, 2016, 09:11:40 am
Μήπως ξέρει κάποιος γιατί μου πετάει αυτό το error???

Ανέβασε άλλο ένα screenshot που να φαίνεται η γραμμή 50 του testbase.cc γιατί εκεί λέει είναι το λάθος.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 06, 2016, 12:50:49 pm
Ανέβασε άλλο ένα screenshot που να φαίνεται η γραμμή 50 του testbase.cc γιατί εκεί λέει είναι το λάθος.

ναι όντως δεν φαινόταν στο προηγουεμενο screenshot  :D!!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 06, 2016, 13:14:40 pm
Ή auto δεν δουλεύει σε όλους τους compilers. Βαλε τον gcc και θα είσαι εντάξει.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: Egkelados on December 06, 2016, 21:31:50 pm
Το copied object πρέπει να γίνει και αυτό delete από τον destructor ?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 06, 2016, 21:54:10 pm
Το copied object πρέπει να γίνει και αυτό delete από τον destructor ?

οχι , αλλα στην πραγματικοτητα οταν κανεις το destructor το θα καταστρεφει κι το copy (οταν αυτο θα βγαινει εξω απο το scope)
Τουλαχιστον ετσι καταλαβα εγω :Ρ

επισης , μπορεις να βαλεις ενα print για να βλεπεις ΠΟΤΕ εκτελειται ο destructor , απλα θυμησου να το σβησεις , για να φαινεται καλυτερα το display του cmd


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on December 06, 2016, 22:37:35 pm
Τι τύπο επιστρέφει η Maze& Maze::operator=(const Maze &m) ;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 06, 2016, 22:40:32 pm
Τι τύπο επιστρέφει η Maze& Maze::operator=(const Maze &m) ;

διαβασε εδώ (http://en.cppreference.com/w/cpp/language/copy_assignment) ;)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on December 06, 2016, 22:57:58 pm
διαβασε εδώ (http://en.cppreference.com/w/cpp/language/copy_assignment) ;)
Ευχαριστώ!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on December 06, 2016, 23:19:24 pm
Ξέρει κανείς το δεύτερο outcome στο evaluation του CMS για ποια συνάρτηση είναι ;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 07, 2016, 01:41:43 am
Ξέρει κανείς το δεύτερο outcome στο evaluation του CMS για ποια συνάρτηση είναι ;


στην print :)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: TheoProt on December 07, 2016, 02:47:15 am
στην print :)
οκ, ευχαριστώ!


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 07, 2016, 17:20:06 pm
Μπορεί να εξηγήσει κάποιος τι θέλει στην get/set Cell γιατι αν μας δίνει τις cell συντεταγμένες δεν μου βγάζει κάποιο νόημα ?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 07, 2016, 19:33:46 pm
Μπορεί να εξηγήσει κάποιος τι θέλει στην get/set Cell γιατι αν μας δίνει τις cell συντεταγμένες δεν μου βγάζει κάποιο νόημα ?

Το κάθε κελί σε κάποιες συντεταγμένες μπορεί να είναι empty ή visited, δηλαδή MazeCell::EMPTY ή MazeCell::VISITED (αντίστοιχα, οι τοίχοι μπορούν να είναι άδειοι ή γεμάτοι - MazeCell::EMPTY ή MazeCell::WALL αντίστοιχα). Επομένως, με τις s/g etCell() πρέπει να επιστρέφεις αν το κάθε κελί είναι MazeCell::EMPTY ή MazeCell::VISITED.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 07, 2016, 23:04:20 pm
Πως μπορούμε να τσεκάρουμε αν οι συναρτήσεις που έχουμε υλοποιήσει είναι σωστές χωρίς ακόμα να έχουμε ολοκληρώσει όλο τον κώδικα;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 07, 2016, 23:08:10 pm
Το κάθε κελί σε κάποιες συντεταγμένες μπορεί να είναι empty ή visited, δηλαδή MazeCell::EMPTY ή MazeCell::VISITED (αντίστοιχα, οι τοίχοι μπορούν να είναι άδειοι ή γεμάτοι - MazeCell::EMPTY ή MazeCell::WALL αντίστοιχα). Επομένως, με τις s/g etCell() πρέπει να επιστρέφεις αν το κάθε κελί είναι MazeCell::EMPTY ή MazeCell::VISITED.

Ωραια και αυτό που θα συγκρίνουμε ποιο θα ειναι ?? Αυτό ειναι το θέμα μου.. Βασικά το *cells περιέχει αυτή την πληροφορία ??


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 07, 2016, 23:22:46 pm
Πως μπορούμε να τσεκάρουμε αν οι συναρτήσεις που έχουμε υλοποιήσει είναι σωστές χωρίς ακόμα να έχουμε ολοκληρώσει όλο τον κώδικα;
Χρειάζεται να υλοποιήσεις μόνο τον πρώτο constructor Maze::Maze(int rows, int cols), έτσι ώστε να δημιουργούνται κατ' αρχάς τα Mazes που θα τεσταριστούν :P Τις υπόλοιπες συναρτήσεις μπορείς να τις υλοποιήσεις με όποια σειρά θες, και το test-maze θα σου εμφανίζει ακριβώς σε ποιά συνάρτηση (και από ποιά σειρά του test-maze.cc ελέγχεται αυτή) υπάρχει κάποιο λάθος - αν κάποια δεν την έχεις υλοποιήσει, θα σου βγάζει errors σε αυτήν. Δες και αυτό το post του MrRobot (https://www.thmmy.gr/smf/index.php?topic=67757.msg1159634#msg1159634) αν έχεις θέμα.

Ωραια και αυτό που θα συγκρίνουμε ποιο θα ειναι ?? Αυτό ειναι το θέμα μου.. Βασικά το *cells περιέχει αυτή την πληροφορία ??
Δεν χρειάζεται να συγκρίνεις τίποτα. Η πληροφορία που λες όντως αναπαριστάται από τον πίνακα στον οποίο δείχνει το *cells.
Αν π.χ. ένα κελί βρίσκεται στη θέση 50 του πίνακα (cells[50] - τον αριθμό της θέσης τον βρίσκεις από τα coordinates μέσω των Maze::getCellArrayCoord() και Maze::getArrayIndex()), τότε στην getCell() απλώς πρέπει να επιστρέφεις το cells[50], και στην setCell() θα πρέπει να εκχωρείς την τιμή val στο cells[50].


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 08, 2016, 00:37:12 am
Τελειααα!!!
Το Location αναφερεται σε expanded η σε cell συντεταγμενες ???


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 01:18:20 am
Παιδια εχω προβλημα με το memory allocation του πινακα-pointer cells.Ενω γινεται κανονικα build βγαζει debug accersion failed.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 01:30:25 am
Στο private section της κλάσης maze,είναι δυνατό να προσθέσουμε συναρτήσεις και μεταβλητές.Έτσι;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 02:02:15 am
Τελειααα!!!
Το Location αναφερεται σε expanded η σε cell συντεταγμενες ???

στην setCell εχεις τις αρχικες συντεταγμενες κι πρεπει εσυ να φροντισεις για τα expanded ...Γενικα , παντου τις αρχικες θα δεχεσαι απο τον "χρηστη" αφου ουσιαστικα τα expanded ειναι δικια σου υλοποιηση ;)

Στο private section της κλάσης maze,είναι δυνατό να προσθέσουμε συναρτήσεις και μεταβλητές.Έτσι;

Θεωρητικα ναι , αλλα δεν ξερω αν χτυπαει καθως δεν το δοκιμασα ;Ρ


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 02:10:19 am
Παιδια εχω προβλημα με το memory allocation του πινακα-pointer cells.Ενω γινεται κανονικα build βγαζει debug accersion failed.

χωρις να ειμαι σιγουρος, το ερρορ μπορει να σημαινει ειτε οτι δεν κανεις καλα allocate την μνημη ειτε οτι δεν την κανεις delete


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 02:17:14 am
Θεωρητικα ναι , αλλα δεν ξερω αν χτυπαει καθως δεν το δοκιμασα ;Ρ

χτυπάει..το δοκίμασα..


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 02:28:19 am
χτυπάει..το δοκίμασα..

βασικα τωρα που το ξαναδιαβασα , σου λεει οτι εχεις την δυνατοτητα να ορισεις δικες σου συναρτησεις που να σε βοηθανε να διαχειριστεις τις private μεταβλητες ! αρα ακυρο αυτο που ειπα


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 08, 2016, 03:42:09 am
Στο private section της κλάσης maze,είναι δυνατό να προσθέσουμε συναρτήσεις και μεταβλητές.Έτσι;

Γενικά νομίζω ότι δεν γίνεται να ορίσεις νέες συναρτήσεις μέσα στην κλάση Maze αφού ο ορισμός της γίνεται μέσα στο maze.hh το οποίο δεν το ανεβάζεις κάπου. Άρα αν θέλεις κάποια βοηθητική συνάρτηση φτιάξτην στο maze.cc, απλά δεν θα έχει πρόσβαση στα private members της maze.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 04:55:30 am
You can use the << stream-output operator on the ostream object, just as if it were cout.
 αυτο παλι τ φαση???? κανω (os<< kati ) και πεταει ερορ για πλακα


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 13:25:45 pm
You can use the << stream-output operator on the ostream object, just as if it were cout.
 αυτο παλι τ φαση???? κανω (os<< kati ) και πεταει ερορ για πλακα

os << "This is a test string" << endl;

κατι τετοιο σου περναει?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 13:58:49 pm
Εχω κ αλλα μικρα θεματακια αλλα αυτο ειναι αστα να πανε....Βρηκα αυτο παρεπιπτοντως
ostream& operator<<(ostream& os, const MazeCell& s){
    //os << s;
    //return os;

ostream& operator<<(ostream& os, const MazeCell& cells);


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 14:04:43 pm
Εχω κ αλλα μικρα θεματακια αλλα αυτο ειναι αστα να πανε....Βρηκα αυτο παρεπιπτοντως
ostream& operator<<(ostream& os, const MazeCell& s){
    //os << s;
    //return os;

ostream& operator<<(ostream& os, const MazeCell& cells);

γενικα προσεξες οτι εχει γινει αλλαγη στην εκφωνηση? η εχεις το τερμα αρχικο code.zip?

η αλλαγη αναφερεται στην print , για αυτο στο λεω...

η εντολη μου επρεπε να σου τρεχει

Code:
void Maze::print(ostream &os) const{
os << "This is a test string" << endl;
system("pause");
}

τετοια μορφη πρεπει να εχει


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 08, 2016, 14:24:24 pm
You can use the << stream-output operator on the ostream object, just as if it were cout.
 αυτο παλι τ φαση???? κανω (os<< kati ) και πεταει ερορ για πλακα

Το os είναι όρισμα μόνο στην print, δεν μπορείς να το χρησιμοποιήσεις κάπου αλλού :) Θα χρειαστεί μόνο να το βάλεις μέσα στην print (η οποία μετά καλείται έτσι: m.print(cout), οπότε η os γίνεται ίση με την cout), και το χρησιμοποιείς κανονικά, σαν το cout, όπως είπε και ο leukosaraphs!

Στην ουσία η print βάζει τους χαρακτήρες στην έξοδο που αναπαριστά το os (output stream). Αν το os είναι η κανονική έξοδος του terminal, δηλαδή το cout, το κείμενο θα πάει στο terminal. Διαφορετικά, το os θα μπορούσε π.χ. να είναι κάποιο άλλο αρχείο, οπότε η εντολή os << "something" θα έγραφε το "something" μέσα στο αρχείο αυτό.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 14:48:30 pm
Ευχαριστω πολυ για τις διευκρινισεις με το os .Μηπως ομως ξερει καποιος επισης που οφειλονται τα output 9,10?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 15:24:30 pm
Ευχαριστω πολυ για τις διευκρινισεις με το os .Μηπως ομως ξερει καποιος επισης που οφειλονται τα output 9,10?


Bασικά,ξέρει κάποιος που αντιστοιχεί το κάθε output στο CMS;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 08, 2016, 15:40:07 pm
Απο την στιγμη που εχετε τα failures και τα OK , δεν σας νοιαζει για τα outputs


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 16:55:01 pm
Στον constructor της maze θα δημιουργήσουμε το expanded version της maze;Eτσι δεν είναι;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 08, 2016, 17:09:31 pm
Στον constructor της maze θα δημιουργήσουμε το expanded version της maze;Eτσι δεν είναι;

Ναι έτσι ακριβώς. Δεν χρειάζεται να τον αρχικοποιησεις κιόλας, μόνο να δεσμεύσεις μνημη


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 08, 2016, 17:22:28 pm
Για τον two argument costructor μου πεταει αυτα τα 2 λάθη
Failure detected on line 30
Failure detected on line 45

εκτος απο δεσμευση μνήμης θέλει και κατι άλλο;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 17:42:05 pm
αυτο παλι;Ψαχνω ποση ωρα στο ιντερνετ και τπτ.....


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 08, 2016, 20:43:05 pm
Οποιος εχει θεμα και δεν του αναγνωριζει τις enum πρεπει να κανει αυτο http://stackoverflow.com/questions/18174988/how-can-i-add-c11-support-to-codeblocks-compiler


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 22:22:05 pm
Oυσιαστικά αυτό που πρέπει να υπάρχει στον constructor της maze είναι μόνο μια δυναμική δέσμευση μνήμης για ένα μονοδιάστατο πίνακα διάστασης(2*rows+1)*(2*cols+1);Και για αυτή την υλοποίηση χρησιμοποιούμε τον MazeCell *cells;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 08, 2016, 22:40:12 pm
Oυσιαστικά αυτό που πρέπει να υπάρχει στον constructor της maze είναι μόνο μια δυναμική δέσμευση μνήμης για ένα μονοδιάστατο πίνακα διάστασης(2*rows+1)*(2*cols+1);Και για αυτή την υλοποίηση χρησιμοποιούμε τον MazeCell *cells;

Ναι, και δεν πρέπει να ξεχάσεις να βάλεις τις σωστές τιμές στις μεταβλητές numRows και numCols της κλάσης.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 08, 2016, 23:59:24 pm
Ναι, και δεν πρέπει να ξεχάσεις να βάλεις τις σωστές τιμές στις μεταβλητές numRows και numCols της κλάσης.

Φαντάζομαι εννοούμε τη μετατροπή σε expanded coordinates;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 09, 2016, 01:22:59 am
τελευται συναρτηση print .....πως εκτυπωνεις αυτο το πραμα @@....εντωμεταξυ στο run μ βγαζει περασες τα τεστ 10/10 και στο cms 7...kappa


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 09, 2016, 01:27:11 am
τελευται συναρτηση print .....πως εκτυπωνεις αυτο το πραμα @@....εντωμεταξυ στο run μ βγαζει περασες τα τεστ 10/10 και στο cms 7...kappa
εχει ενα hint στην εκφωνηση ;)

επισης τα test του test.maze , ελεγχουν ελαχιστες οριακες καταστασεις ;) αρα λογικα εκει το χανεις


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 09, 2016, 01:56:36 am
ρε παιδια εχω κολλησει στον constructor της maze ενω κανω κανονικα allocate την μνημη συνεχιζει να βγαζει λαθος ...
επισης numRows = rows ή numRows = 2 * rows +1 ??


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 09, 2016, 12:19:02 pm
Φαντάζομαι εννοούμε τη μετατροπή σε expanded coordinates;
ρε παιδια εχω κολλησει στον constructor της maze ενω κανω κανονικα allocate την μνημη συνεχιζει να βγαζει λαθος ...
επισης numRows = rows ή numRows = 2 * rows +1 ??

Καλύτερα να μην κάνετε μετατροπή σε expanded coordinates, να βάζετε απλώς numRows = rows, και να κάνετε την μετατροπή όταν χρειάζεται.

Αν έχεις πρόβλημα με την allocate, δοκίμασε απλώς να κάνεις allocate 100 000 στοιχεία που θα σου φτάσουν σίγουρα, και δες αν συνεχίζεις να έχεις πρόβλημα  :D


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 09, 2016, 12:56:26 pm
Επίσης γνωρίζει κάποιος γιατι μου λεει οτι δεν υπάρχει η συνάρτηση assert ??


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 09, 2016, 14:06:17 pm
Επίσης γνωρίζει κάποιος γιατι μου λεει οτι δεν υπάρχει η συνάρτηση assert ??


Δοκίμασε αυτό το #include:
Code:
#include <cassert>


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: sotiristsar on December 09, 2016, 19:12:18 pm
το έχει στο test-maze δηλωμενο.
Πρέπει να το ξαναγράψω και δτο maze ??


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: MrRobot on December 09, 2016, 21:09:26 pm
το έχει στο test-maze δηλωμενο.
Πρέπει να το ξαναγράψω και δτο maze ??

Ναι πρέπει. Αν ήταν γραμμένο στο maze.hh δεν θα ήταν υποχρεωτικό να το γράψεις στο test-maze αφού στο test-maze κάνεις include τον κώδικα του maze.hh. Το αντίστροφο δεν ισχύει, αρα το maze.cc και το maze.hh δεν ξέρουν τίποτα για τα include στο test-maze.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 09, 2016, 21:11:52 pm
Οι συναρτήσεις getNumRows και getNumCols επιστρέφουν τις σειρές και τις στήλες που έχει η expanded maze ή η κανονική μορφή της;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 09, 2016, 21:20:27 pm
στο cms μου βγαζει ως αποτελεσμα στα περισσοτερα
Execution killed with signal 11 (could be triggered by violating memory limits)
 Ξερει κανεις τι παιζει;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 09, 2016, 21:26:52 pm
Οι συναρτήσεις getNumRows και getNumCols επιστρέφουν τις σειρές και τις στήλες που έχει η expanded maze ή η κανονική μορφή της;

τις χρησιμοποιεις απλα για να κανεις access στα private members της class σου  ;)

 
στο cms μου βγαζει ως αποτελεσμα στα περισσοτερα
Execution killed with signal 11 (could be triggered by violating memory limits)
 Ξερει κανεις τι παιζει;

δεν κανεις σωστα δεσμευση της δυναμικης μνημης ή/και δεν την αποδεσμευεις


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 09, 2016, 21:45:47 pm
τις χρησιμοποιεις απλα για να κανεις access στα private members της class σου  ;)

 

Ευχαριστώ πολύ!

Για να εμφανίζονται τα ok για τις συναρτήσεις που έχουν γίνει σωστά,αρκεί να έχει υλοποιηθεί μόνο ο maze constrcuctor;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 09, 2016, 21:54:36 pm
Ευχαριστώ πολύ!

Για να εμφανίζονται τα ok για τις συναρτήσεις που έχουν γίνει σωστά,αρκεί να έχει υλοποιηθεί μόνο ο maze constrcuctor;

θα βγαζει διαφορα errors , οσες περισσοτερες συναρτησεις κανετε , τοσα περισσοτερα failures θα γινονται σωστα .. αλλα προσωπικα δεν ξερω ποιες πρεπει να γινουν πρωτα :Ρ γιατι τις εκανα μπερδεμενες


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 09, 2016, 21:59:33 pm
θα βγαζει διαφορα errors , οσες περισσοτερες συναρτησεις κανετε , τοσα περισσοτερα failures θα γινονται σωστα .. αλλα προσωπικα δεν ξερω ποιες πρεπει να γινουν πρωτα :Ρ γιατι τις εκανα μπερδεμενες

ψιλοπάμε στα τυφλά λίγο δηλαδή;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 09, 2016, 22:03:25 pm
ψιλοπάμε στα τυφλά λίγο δηλαδή;

για να κτλβεις , εγω εκανα πρωτα ολα τα operations (χωρις την print) , και μετα πηγα εκανα τις υπολοιπες συναρτησεις...τα οκ μου τα επαιρνα κανονικα , απλα επρεπε να κανω ΚΑΙ τον operator και να διορθωσω τον copy constructor για να σταματησει να βγαζει κατι χαζα errors ... για αυτο δεν ξερω τι χρειαζεται κι τι οχι  :D τα failures ετσι κι αλλιως σου λενε σε ποια σειρα ειναι το λαθος , εε πηγαινε στο test maze και δες τι πρεπει να κανεις/διορθωσεις


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 09, 2016, 22:09:46 pm
μάλιστα..τα errors που μου πετάει είναι για κάποιες συναρτήσεις που δεν έχουν υλοποιηθεί ακόμα επειδή  δεν επιστρέφουν τιμή.Λογικά αν υλοποιηθούν και αυτές θα γίνει build το project και θα αρχίζουν να πετάγονται και τα οκ;Σωστά;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 09, 2016, 22:11:23 pm
build θα επρεπε ηδη να κανει , αλλα ναι ... πρεπει να βαλεις return values


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 09, 2016, 22:13:32 pm
ναι ντάξει λάθος μου,κάνει build απλά πετάει τα errors


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 10, 2016, 02:33:39 am
Πως γινεται αυτο να μου το παιρνει λαθος(εννοω το output 2 incorrect) ;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: filip on December 10, 2016, 11:17:24 am
Για να γίνει σωτά η Copy constructor και η Copy assignment operator τι πρέπει να αντιγράφεται στο νέο αντικείμενο;
- numRows, numCols;
- και cells?
- ή τα πάντα (και start, stop κτλ);

Και αν αντιγράφεται το cells τι ακριβώς αντιγράφεται; μόνο ο δείκτης; ή όλα τα περιεχόμενα του πίνακα σε έναν νέο ίδιου μεγέθους αλλά αλλού στη μνήμη...???  :-\


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 10, 2016, 12:03:36 pm
Πως γινεται αυτο να μου το παιρνει λαθος(εννοω το output 2 incorrect) ;

θελει το σηματακι της καθετου | οχι 2 γραμμουλες (υποθετω :Ρ )

Για να γίνει σωτά η Copy constructor και η Copy assignment operator τι πρέπει να αντιγράφεται στο νέο αντικείμενο;
- numRows, numCols;
- και cells?
- ή τα πάντα (και start, stop κτλ);

Και αν αντιγράφεται το cells τι ακριβώς αντιγράφεται; μόνο ο δείκτης; ή όλα τα περιεχόμενα του πίνακα σε έναν νέο ίδιου μεγέθους αλλά αλλού στη μνήμη...???  :-\

ουσιαστικα ο copy constructor "δημιουργει" ενα αλλο ιδιο object για να κανεις την δουλεια σου μαυτο  ;) . Αρα , το νεο ¨δημιουργημα" δεν πρεπει να εχει τα ιδια χαρακτηριστικα με το πρωτοτυπο?

ο assignement opperator , εχει μια μικρη διαφορα στην εννοια του , απο τον copy constructor .., Καντε μια αναζητηση , για deep copy.

Υ.γ. Η λεξη "δημιουργει" δεν ξερω αν ειναι η καταλληλη , μην σας μπερδεψω κιολας  :P


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kongr45gpen on December 10, 2016, 12:25:33 pm
Πως γινεται αυτο να μου το παιρνει λαθος(εννοω το output 2 incorrect) ;
Βάλε μια επιπλέον cout << "\n"; στο τέλος της print  :P


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: tomas on December 10, 2016, 14:17:26 pm
Βάλε μια επιπλέον cout << "\n"; στο τέλος της print  :P

To ιδιο ακριβως μ βγαζει  >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( τι φταιει....


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: Achilleas1997 on December 10, 2016, 14:48:48 pm

To ιδιο ακριβως μ βγαζει  >:( >:( >:( >:( >:( >:( >:( >:( >:( >:( τι φταιει....


Εμενα το επαιρνε λαθος οσο εκανα print απο το 0 εως το numRows - 1 και απο το 0 εως το numCols - 1.. Αν κανεις το ιδιο δοκιμασε απο το start μεχρι το end  :)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: kanou_tom on December 10, 2016, 15:31:53 pm
Ξέρει κανείς σε ποια σημεία του κώδικα πρέπει να υπάρχει η assert;Kαι γενικά πως υλοποιείται;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 10, 2016, 15:48:16 pm
στην set   start
        this->start.row=row;
        this->start.col=col;
 
        get start
        return this->start;
o κωδικας αν και απλος συνεχιζει να πεταει incorrect στο δευτερο test..
καποιος καμια ιδεα;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 10, 2016, 16:28:05 pm
Ξέρει κανείς σε ποια σημεία του κώδικα πρέπει να υπάρχει η assert;Kαι γενικά πως υλοποιείται;

γενικα ειναι καλο να υπαρχουν στο προγραμμα σου , για να ελεγχεις τις εισοδους

πρεπει να υπαρχει σιγουρα μια στην getWallArrayCoord για να ελεγχεις αν υπαρχουν στοιχεια "πανω" απο το (0,0)

Οπως εγραψαν και παλαιοτερα, συντασσεται ετσι:

Code:
#include <assert.h>
assert( η συνθηκη που θες να ισχυει);

στην set   start
        this->start.row=row;
        this->start.col=col;
 
        get start
        return this->start;
o κωδικας αν και απλος συνεχιζει να πεταει incorrect στο δευτερο test..
καποιος καμια ιδεα;

το this για ποιον λογο?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 10, 2016, 17:03:20 pm
μου βγαζει στα περισσοτερα τεστ  στο cms Execution failed because the return code was nonzero 
ξερει κανεις αν τις ελεγχει με την ιδια σειρα οπως h test maze για να βρω που βρισκεται το προβλημα.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: gkouziik on December 10, 2016, 20:25:20 pm
το end στον constructor της maze δεν το αρχικοποιουμε  στελνωντας ορισματα στην Location τα 2*numRows+1 kai 2*numCols+1 ?? η το βαζουμε και αυτο 0 καλωντας την Location()?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: afro on December 10, 2016, 20:53:42 pm
το end στον constructor της maze δεν το αρχικοποιουμε  στελνωντας ορισματα στην Location τα 2*numRows+1 kai 2*numCols+1 ?? η το βαζουμε και αυτο 0 καλωντας την Location()?
Το end είναι σε cell-coordinates όπως περιγράφεται στην maze.hh.Άρα το ορίζεις ως Location αλλά όχι με τις συντεταγμένες που ανέφερες γιατί αντιστοιχούν σε expanded .Επίσης πρέπει να προσέξεις το γεγονός ότι ο πίνακας ξεκινάει από το 0.Δες και τη φωτο που αναπαριστά το λαβύρινθο σε πίνακα για να σε βοηθήσει.


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: SaltyMeatBalls on December 10, 2016, 20:58:32 pm
το end στον constructor της maze δεν το αρχικοποιουμε  στελνωντας ορισματα στην Location τα 2*numRows+1 kai 2*numCols+1 ?? η το βαζουμε και αυτο 0 καλωντας την Location()?

μπορεις να το αρχικοποιησεις στο 0,0


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 10, 2016, 21:22:33 pm
ξερει καποιος  στο cms τι τεσταρουν το 6ο και το 8ο output?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: smegalou on December 10, 2016, 21:50:47 pm
Στο cms τα outputs είναι με την ίδια ακριβώς σειρά με το testmaze απλώς το δεύτερο output είναι το print αντί να είναι το τελευταίο, οπότε πάει :

1ο Constructor
2o Print
3ο get/set start/end value
... και ούτω καθεξής!

Αυτό μου είπεο Φλώρος τουλάχιστον όταν το ρώτησα!! ;)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 11, 2016, 03:13:07 am
πως κανω built και run  και τα 5 αρχεια σε codeblocks:
πως κανω make clean; make sto testing;


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: thanosthehuge on December 11, 2016, 12:56:10 pm
Μου έτυχε ένα περίεργο πρόβλημα: όταν τρέχω το test-maze μου βγάζει failure στο set-wall, αλλά μόνο στις σειρές που ελέγχει τα EAST και WEST, ενώ τα NORTH και SOUTH τα περνάει κανονικά  :o
Η setWall μου είναι αυτή:

Code:
void Maze::setWall(int cellRow, int cellCol, Direction direction){
  Location wall_loc=getCellArrayCoord(cellRow, cellCol);
  if(direction==Direction::NORTH)
    wall_loc.row--;
  else if(direction==Direction::SOUTH)
    wall_loc.row++;
  else if(direction==Direction::EAST)
    wall_loc.col++;
  else if(direction==Direction::WEST)
    wall_loc.col--;

  cells[getArrayIndex(wall_loc)]=MazeCell::WALL;
}

δηλαδή όπως το λέει να το υλοποιήσουμε στην εκφώνηση... Μήπως βλέπει κανείς που μπορεί να είναι το λάθος?? Έχω καρακολλήσει!  :(


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: steveng8 on December 11, 2016, 17:37:40 pm
φιλε και εγω το ιδιο ακριβως προβλημα εχω..αν και το εκανα ετσι

cells[getArrayIndex(getWallArrayCoord(cellRow,cellCol,direction))]=MazeCell::WALL;

βγαζει προβλημα στις set wall kai set all walls..ειτε δεν εγιναν σωστα οι τριες βοηθητικες στην αρχη
ειτε χανουμε κατι προφανη...




Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 11, 2016, 17:38:37 pm


η συναρτηση λεγεται setWall , εχεις υλοποιησει ολοκληρη συναρτηση για να παιρνεις τις συντεταγμενες τοιχων  8)) ...εκμεταλλευσου την , κι μην κανεις 2 φορες την ιδια δουλεια ;)


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: gkouziik on December 11, 2016, 17:40:30 pm
ενω οταν κανω test-maze στο terminal παιρνω σε ολα οκ οταν το ανεβαζω στο cms μου βγαζει 0/10 ενω αντικαθιστω το #include "maze.hh" με #include "ps5.h"
το maze.cc δεν πρεπει να ανεβασω απλως?? δεν μπορω να καταλαβω τι συμβαινει


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: mprizou on December 11, 2016, 20:04:58 pm
απο τη στιγμη που  κανει compile δεν εχεις λαθος στο include παντως.δες τα error που σου βγαζει το cms


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: alekosts on December 11, 2016, 20:18:47 pm
φιλε και εγω το ιδιο ακριβως προβλημα εχω..αν και το εκανα ετσι

cells[getArrayIndex(getWallArrayCoord(cellRow,cellCol,direction))]=MazeCell::WALL;

βγαζει προβλημα στις set wall kai set all walls..ειτε δεν εγιναν σωστα οι τριες βοηθητικες στην αρχη
ειτε χανουμε κατι προφανη...





ειχαμε καποια εξελιξη στο θεμα γιατι εχω και εγω το ιδιο προβλημα?


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: leukosaraphs! on December 11, 2016, 20:25:19 pm
φιλε και εγω το ιδιο ακριβως προβλημα εχω..αν και το εκανα ετσι

cells[getArrayIndex(getWallArrayCoord(cellRow,cellCol,direction))]=MazeCell::WALL;

βγαζει προβλημα στις set wall kai set all walls..ειτε δεν εγιναν σωστα οι τριες βοηθητικες στην αρχη
ειτε χανουμε κατι προφανη...




η εντολη :

Code:
cells[getArrayIndex(getWallArrayCoord(cellRow,cellCol,direction))]=MazeCell::WALL;

οταν την βαζω στο δικο μου maze.cc τρεχει (οπως ειναι κι λογικο ) αρα κοιταξτε τις αλλες συναρτησεις σας


Title: Re: [Προγραμματιστικές Τεχνικές] Task 5 - Κυριακή, 11/12 11:55 μμ
Post by: Panthera Leo on December 12, 2016, 00:04:57 am
Εκλεισε το CMS. Πάλι λάθος ώρα είχαν βάλει.  

Ανοιξε παλι, οκ