THMMY.gr

Μαθήματα Βασικού Κύκλου => Αντικειμενοστραφής Προγραμματισμός => Topic started by: Ευχαριστο Διαλειμμα on November 12, 2009, 12:10:59 pm



Title: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 12, 2009, 12:10:59 pm
Εργασία Ε

Για την επίλυση ενός συστήματος γραμμικών εξισώσεων a*x=b, όπου a τετραγωνικός πίνακας, x το διάνυσμα των αγνώστων και  b το διάνυσμα των σταθερών όρων,  μπορεί να εφαρμοστεί ένας επαναληπτικός αλγόριθμος ο οποίος υλοποιείται από τη σχέση  z=(b-a*x+d*x)/d ,όπου a ο πίνακας των συντελεστών των αγνώστων του συστήματος, b το διάνυσμα των σταθερών όρων και d το διάνυσμα που έχει ως συνιστώσες τα διαγώνια στοιχεία του πίνακα a. Η εφαρμογή της πιο πάνω σχέσης δίνει μια καλύτερη προσέγγιση z για το διάνυσμα της λύσης από ότι εκείνη μιας αρχικής προσέγγισης  της λύσης με το διάνυσμα x. Η διαδικασία εφαρμόζεται επαναληπτικά θέτοντας x=z έως ότου το άθροισμα Σ|zi-xi| ,όπου zi,xi οι αντίστοιχες συνιστώσες των διανυσμάτων z και x, γίνει μικρότερο από έναν μικρό αριθμό e που δηλώνει την επιθυμητή ακρίβεια του αποτελέσματος.

Να γραφεί το λογισμικό στο οποίο να ορίζεται η κλάση matrix η οποία υλοποιεί έναν πίνακα δύο διαστάσεων. Η κλάση να διαθέτει μια συνάρτηση αρχικών συνθηκών η οποία να δέχεται ως ορίσματα τις διαστάσεις του  πίνακα, να δεσμεύει δυναμικά μνήμη για τα στοιχεία του και να διαβάζει τιμές για τα στοιχεία αυτά. Στην κλάση να οριστεί μια επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση a[j], όπου a αντικείμενο τύπου matrix, να επιστρέφει την τιμή του στοιχείου του πίνακα που ορίζει το αντικείμενο a και το οποίο βρίσκεται στην i γραμμή και στην j στήλη του πίνακα.

Στο λογισμικό να οριστεί ακόμη η κλάση vector η οποία  υλοποιεί ένα διάνυσμα. Στην κλάση να ορίζονται:

α) Μια επικάλυψη του τελεστή = τέτοια ώστε η έκφραση d = a, όπου d αντικείμενο τύπου vector και a αντικείμενο τύπου matrix, να δεσμεύει την απαραίτητη μνήμη και να καταχωρεί σε αυτήν ως συνιστώσες του διανύσματος d τα διαγώνια στοιχεία του πίνακα a.

β) Μία επικάλυψη του τελεστή * τέτοια ώστε η έκφραση v*d  όπου v και d αντικείμενα τύπου vector να επιστρέφει ένα αντικείμενο του ίδιου τύπου στο οποίο το διάνυσμα που υλοποιεί να έχει ως συνιστώσες το γινόμενο των αντιστοίχων συνιστωσών των διανυσμάτων που υλοποιούν τα αντικείμενα v και d.  

γ) Μία επικάλυψη του τελεστή - τέτοια ώστε η έκφραση v-d  όπου v και d αντικείμενα τύπου vector να επιστρέφει ένα αντικείμενο του ίδιου τύπου στο οποίο το διάνυσμα που υλοποιεί να έχει ως συνιστώσες τη διαφορά των αντιστοίχων συνιστωσών των διανυσμάτων που υλοποιούν τα αντικείμενα v και d.

δ) Μία επικάλυψη του τελεστή + τέτοια ώστε η έκφραση v+d  όπου v και d αντικείμενα τύπου vector να επιστρέφει ένα αντικείμενο του ίδιου τύπου στο οποίο το διάνυσμα που υλοποιεί να έχει ως συνιστώσες το άθροισμα των αντιστοίχων συνιστωσών των διανυσμάτων που υλοποιούν τα αντικείμενα v και d.

ε) Μία επικάλυψη του τελεστή / τέτοια ώστε η έκφραση v/d  όπου v και d αντικείμενα τύπου vector να επιστρέφει ένα αντικείμενο του ίδιου τύπου στο οποίο το διάνυσμα που υλοποιεί να έχει ως συνιστώσες το πηλίκο των αντιστοίχων συνιστωσών των διανυσμάτων που υλοποιούν τα αντικείμενα v και d.

στ) Μία επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση v, όπου v αντικείμενου τύπου vector να επιστρέφει την τιμή της i συνιστώσας του διανύσματος που υλοποιεί το αντικείμενο v.

ζ) Μία επικάλυψη του τελεστή ++ τέτοια ώστε η έκφραση ++v, όπου v αντικείμενο τύπου vector να επιστρέφει  το άθροισμα των απολύτων τιμών των συνιστωσών του διανύσματος που υλοποιεί το αντικείμενο v.

Στο λογισμικό να ορίζεται ακόμη μια επικάλυψη γενικής χρήσης του τελεστή * τέτοια ώστε η έκφραση a*x όπου a αντικείμενο τύπου matrix και x αντικείμενο τύπου vector να επιστρέφει ένα αντικείμενο τύπου vector στο οποίο το διάνυσμα που υλοποιεί να είναι το γινόμενο του πίνακα που υλοποιεί το αντικείμενο a επί το διάνυσμα που υλοποιεί το αντικείμενο x.

Η συνάρτηση main στο πρόγραμμα να ορίζει και να δημιουργεί τα απαραίτητα αντικείμενα για την επίλυση ενός συστήματος γραμμικών εξισώσεων. Να διαβάζει ένα μέγιστο αριθμό επαναλήψεων και να εφαρμόζει για τον αριθμό αυτόν την επαναληπτική μέθοδο επίλυσης που περιγράφηκε πιο πάνω.

Σημείωση: Η συνάρτηση επικάλυψης του τελεστή * για γενική χρήση να μην οριστεί ως φιλική στις κλάσεις matrix και vector.

Οι τιμές του πίνακα και των διανυσμάτων, όπου χρειαστεί, να ανακαλούνται με τη χρήση του τελεστή [ ].

Επειδή η σύγκληση του αλγόριθμου δεν είναι πάντα εξασφαλισμένη για τις δοκιμές σας να χρησιμοποιήσετε το σύστημα

5x1+2x2+x3   = 8

x1+7x2+x3       =9

2x1+2x2+8x3=12

το οποίο έχει ως λύση το διάνυσμα (1,1,1).


Title: Re: [C++] 5η Εργασια 2009
Post by: ggpyr on November 12, 2009, 12:36:58 pm
lol???? δεν μας βάζει και τις άλλες 3 τώρα απλά για να τις έχουμε...έλεος για 29/11


Title: Re: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 12, 2009, 17:34:37 pm
έλεος για 29/11

Ειπε πως δε θα γινουν εργαστηρια αυτη τη βδομαδα που ερχεται (16-20/11) οποτε δεν εχει νοημα να κανουμε ασκηση την αλλη Κυριακη. :P
Ειπε και στο μαθημα πως μας αφηνει να ξεκουραστουμε μια βδομαδα. :D


Title: Re: [C++] 5η Εργασια 2009
Post by: ggpyr on November 14, 2009, 18:45:40 pm
Όταν λέει "  Στο λογισμικό να ορίζεται ακόμη μια επικάλυψη γενικής χρήσης του τελεστή *  " τί εννοεί? μπορούμε να έχουμε και επικαλύψεις εκτός κλάσεων που εφαρμόζονατι γενικά? Αν ναι πώς το κάνω...στις σημειώσεις δεν βρήκα κάτι παρόμοιο  :-\


Title: Re: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 15, 2009, 13:00:10 pm
Ναι οι επικαλυψεις τελεστων λειτουργουν στη main οπως μπορεις να δεις στο παραδειγμα της σελιδας 45 των σημειωσεων.


Title: Re: [C++] 5η Εργασια 2009
Post by: antonios on November 15, 2009, 13:19:06 pm
Ναι οι επικαλυψεις τελεστων λειτουργουν στη main οπως μπορεις να δεις στο παραδειγμα της σελιδας 45 των σημειωσεων.

standar σελίδα 45?? έψαξα αλλά δεν βρήκα τίποτα.... θυμάμαι μόνο ένα παράδειγμα που μας είχε κάνει σε ένα μάθημα πέρυσι...... αν το έχεις βρει, ρίξ'το ένα post... το κομμάτι με την επικάλυψη μόνο...


Title: Re: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 15, 2009, 13:37:35 pm
Εδω εχει επικαλυψη τελεστων...Επειδη το ειχα μετατρεψει σε pdf μου εβγαζε σελιδα 45...Στο Word ειναι σελιδα 43...

Code:
#include <iostream.h>
class array {
  int a[3];
public:
  array operator+(array t);
  array operator=(array t);
  array operator++(void);
  void out(void);
  void set(int *k);
};
array array::operator+(array t)
{
  array tm;
  int i;
  for(i=0; i<3; i++)
    tm.a[i]=a[i]+t.a[i];
  return tm;
}
array  array::operator=(array t)
{
  int i;
  for(i=0; i<3; i++)
    a[i]=t.a[i];
  return *this;
}
array array::operator++(void)
{
  int i;
  for(i=0; i<3; i++)
    a[i]++;
  return *this;
}
void array::out(void)
{
  int i;
  for(i=0; i<3; i++)
    cout <<a[i]<<" ";
  cout <<"\n";
}
void array::set(int *k)
{
  int i;
  for(i=0; i<3; i++)
    a[i]=*(k+i);
}
 

void main()
{
  array w,r,u;
  int k[]={1,2,3},m[]={10,20,30};
  w.set(k);
  r.set(m);
  u=r+w;
  u.out();
  u=w+r+u;
  u.out();
  u=r=w;
  u.out();
  u++;
  u.out();
  ++u;
  u.out();
}

Edit: Προσεξα τη λεξη "γενικα" μολις.  :o
Δηλαδη ασχετα με το ειδος των μεταβλητων/αντικειμενων που χρησιμοποιουνται στην πραξη; Αν ειναι ετσι το πραμα ειμαι FAIL! :P

Edit2: Α, οκ μολις ειδα το τμημα της εκφωνησης...Δεν ειμαι fail. :P


Title: Re: [C++] 5η Εργασια 2009
Post by: antonios on November 15, 2009, 13:45:48 pm
υπάρχει κανένα παράδειγμα με επικάλυψη τελεστή εκτός κλάσης??
 ουσιαστικά να αναφέρεται στην main....
νομίζω στις σημειώσεις δεν υπάρχει κάτι τέτοιο... μόνο στα μαθήματα αν είπαν κάτι τέτοιο...


Title: Re: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 15, 2009, 13:55:46 pm
Η επικαλυψη οριζεται στην κλασης, ομως στο παραδειγμα που εβαλα οι πραξεις με τους τελεστες γινονται στη main. Τι ακριβως εχω λαθος;;; :P


Title: Re: [C++] 5η Εργασια 2009
Post by: antonios on November 15, 2009, 14:01:36 pm
νομίζω ότι πρέπει να γίνει κανονικά ορισμός όπως είναι π.χ. το

array array::operator*(array a), παρόμοια πρέπει να οριστεί χωρίς να έχει σχέση με την κλάσση array.... απλά ήξερα ότι πρέπει να γίνει φιλική στις 2 άλλες κλάσεις.... εδώ μας ζητάει μία τσαχπινιά..... ;D


Title: Re: [C++] 5η Εργασια 2009
Post by: ggpyr on November 15, 2009, 15:09:27 pm
μα δεν γίνεται να έχουμε επικάλυψη του τελεστή * με friendly συναρτήσεις στην συγκεκριμένη άσκηση αφού υπάρχει ήδη μία απικάλυψη του * στη vector  :???:

Εγώ θα την κάνω για την matrix αφού θέλει το πρώτο όρισμα να είναι στοιχείο matrix και ας με το πάρει λάθος


Title: Re: [C++] 5η Εργασια 2009
Post by: antonios on November 15, 2009, 15:15:56 pm
μα δεν γίνεται να έχουμε επικάλυψη του τελεστή * με friendly συναρτήσεις στην συγκεκριμένη άσκηση αφού υπάρχει ήδη μία απικάλυψη του * στη vector  :???:

Εγώ θα την κάνω για την matrix αφού θέλει το πρώτο όρισμα να είναι στοιχείο matrix και ας με το πάρει λάθος

προφανώς θα υπάρχει μία λύση , αλλά κλασικά ο Κορτέσης θέλει κάτι διαφορετικό.......


Title: Re: [C++] 5η Εργασια 2009
Post by: Ευχαριστο Διαλειμμα on November 15, 2009, 15:34:35 pm
Γινεται να εχεις δυο επικαλυψεις του ιδιου τελεστη αρκει να εχει διαφορετικα ορισματα ή να οριζεται σε διαφορετικες κλασεις.

Quote
β) Μία επικάλυψη του τελεστή * τέτοια ώστε η έκφραση v*d  όπου v και d αντικείμενα τύπου vector

Quote
Στο λογισμικό να ορίζεται ακόμη μια επικάλυψη γενικής χρήσης του τελεστή * τέτοια ώστε η έκφραση a*x όπου a αντικείμενο τύπου matrix και x αντικείμενο τύπου vector

Αν την πρωτη την ορισεις μεσα στην κλαση vector δεχεται ενα ορισμα τυπου vector (και αριστερα του τελεστη ειναι παλι τυπου vector αφου οριστηκε μεσα στην κλαση vector) ενω τη δευτερη την οριζεις στην κλαση matrix και δεχεται ενα ορισμα τυπου vector (αριστερα του τελεστη ειναι τυπου matrix ομως αφου οριστηκε μεσα στην κλαση matrix).


Title: Re: [C++] 5η Εργασια 2009
Post by: ggpyr on November 15, 2009, 15:42:16 pm
Μα αυτό λέω να κάνω (δηλαδή το έκανα τώρα) αλλά αυτός δεν το θέλει αυτό αφού λέει η επικάλυψη αυτή να είναι γενική και επίσης γράφει

"   Σημείωση: Η συνάρτηση επικάλυψης του τελεστή *  για γενική χρήση να μην οριστεί ως φιλική στις κλάσεις matrix και vector.  "


Title: Re: [C++] 5η Εργασια 2009
Post by: ggpyr on November 15, 2009, 15:59:56 pm
Στη σχέση z=(b-a*x+d*x)/d τί βάζουμε ως x διάνυσμα? αφού είναι το διάνυσμα [x1,x2,..,xn] δηλαδή οι άγνωστοι...όμως το z θα πρέπει να έχει αριθμούς ως στοιχεία ώς προσέγγιση του x Μήπως βάζουμε για την πρώτη επανάληψη τυχαίο διάνυσμα x και μετά θέτουμε στις υπόλοιπες z=x???  :-\ :-\ :-\


Title: Re: [C++] 5η Εργασια 2009
Post by: Indy on November 16, 2009, 18:47:56 pm
Ναι, βάζουμε ένα τυχαίο x π.χ. το [0 0 ... 0]


Title: Re: [C++] 5η Εργασια 2009
Post by: foulis on November 18, 2009, 20:34:01 pm
ξέρει κανένας πως γινεται αυτο?

"Στην κλάση να οριστεί μια επικάλυψη του τελεστή [ ] τέτοια ώστε η έκφραση a[ i ] [ j ]  , όπου a αντικείμενο τύπου matrix, να επιστρέφει την τιμή του στοιχείου του πίνακα που ορίζει το αντικείμενο a και το οποίο βρίσκεται στην i γραμμή και στην j στήλη του πίνακα."


float operator[ ][ ](int i,int j);      <-- η αρχική ιδέα μου αλλά είναι λάθος


edit1:μετα απο το κατω post και ψαξιμο
http://www.thmmy.gr/smf/index.php?topic=27849.75
ευχαριστω billakos


Title: Re: [C++] 5η Εργασια 2009
Post by: billakos on November 18, 2009, 20:37:54 pm
δεν θυμαμαι ακριβως αλλα αν δεις παλιοτερα τοπικ εχει ξαναειπωθει...περσυ θυμαμαι ειχε γίνει μεγάλη συζητηση..και το βιβλιο σε ενα σημειο νομιζω κατι γραφει για τον συγκεκριμενο τελεστή    ;)


Title: Re: [C++] 5η Εργασια 2009
Post by: kgiann78 on November 19, 2009, 20:12:49 pm
Ρε σεις το ψάχνω και γω αλλά δεν βρίσκω κάτι σχετικό που να έχει overloading operator με διπλό [] (αυτό το [][] δηλαδή...)
 Καθώς έψαχνα στο internet έπεσα σε καποιους που έλεγαν ότι είναι προτιμότερο να χρησιμοποιούμε το () παρά το [][]...

Στο () μπορείς να δώσεις δυο ορίσματα και να κάνεις την δουλειά σου...

πχ..  int Matrix::operator () (int a, int b) {
            return pinakas[ a ] [ b ];
        }
 
τόσο απλά... ενώ με τον τελεστή [] χρειάζεται οπωσδήποτε κάθε τελεστής το δικό του όρισμα.... Τώρα πως θα γίνει αυτό.... βλέπουμε

Αν βρείτε τίποτα ρίχτε το στη φωτιά....


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 19, 2009, 20:20:45 pm
Το θεμα ειναι οτι πρεπει να επιστρεφει float. Αν δεν το ελεγε ειχα κατι στα υπ'οψιν αλλα  ^sealed^ ^sealed^ ^sealed^


Title: Re: [C++] 5η Εργασια 2009
Post by: kgiann78 on November 19, 2009, 20:59:08 pm
float ε? Θεωρούσα ότι κάτι σε integer θα ήθελε... Πάλι καλά....

Τελικά ήταν πιο εύκολο απ' ότι πίστευα!

int * Matrix::operator [](int k){
   return value[(k)];
}

βέβαια το int είναι γιατί νόμιζα ότι θα έβγαζε ιντ αλλά δεν πειράζει... Το αλλάζουμε αυτό...

Μόνο μια παρατήρηση... Για να μου δουλέψει σωστά, δηλαδή όταν δίνεις α[1][2] να σου βγάζει πραγματικά το στοιχείο που είναι στην 1η γραμμή και 2η στηλη έπρεπε να κάνω μια αλλαγή στον τρόπο που δηλώνεις τα στοιχεία στη Matrix, δηλαδή όχι

for ( int i = 0 ; i <  size ;  i++ ) {

κλπ κλπ

αλλά

for ( int i = 1 ; i < = size ; i++ ) {

κλπ κλπ



Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 19, 2009, 21:04:48 pm
Δεν σε πιανω...

Η value να φανταστω ειναι ο πινακας της κλασης...

Γιατι γινεται αυτο με την παρενθεση?


Title: Re: [C++] 5η Εργασια 2009
Post by: kgiann78 on November 19, 2009, 21:48:01 pm
xmmm η value είναι ας πούμε η τιμήτου εκάστοτε στοιχείου του πίνακα... βλέπε float **value;


Title: Re: [C++] 5η Εργασια 2009
Post by: frou_ira on November 20, 2009, 17:48:08 pm
Μία πολυ απλη ερωτηση: Πως διαβάσατε τα στοιχεία του πίνακα b;Η εκφώνηση λέει να κάνουμε όλα τα άλλα εκτός από το πώς να τα διαβάζουμε.Δε λέει τίποτα για αρχικών συνθηκών.Αν τα διαβάσω από τη main δεν θα μπερδευτεί με την επικάλυψη του [ ] που έχουμε κάνει στην κλάση vector;


Title: Re: [C++] 5η Εργασια 2009
Post by: kgiann78 on November 21, 2009, 12:20:46 pm
Μία πολυ απλη ερωτηση: Πως διαβάσατε τα στοιχεία του πίνακα b;Η εκφώνηση λέει να κάνουμε όλα τα άλλα εκτός από το πώς να τα διαβάζουμε.Δε λέει τίποτα για αρχικών συνθηκών.Αν τα διαβάσω από τη main δεν θα μπερδευτεί με την επικάλυψη του [ ] που έχουμε κάνει στην κλάση vector;

Εγώ για να μη μπαίνω σε τέτοια διαδικασία έφτιαξα μια συνάρτηση (στη Vector) που να δίνω τιμές. Έτσι την καλώ στη main στο στοιχείο τύπου vector που θέλω να γεμίσω (με τιμές).

Πάντως θα πρέπει να φτιάξουμε συνθήκες αρχικοποίησης γιατί τις χρειάζεται... πχ έστω όπως λέει η άσκηση θέλει:

 d = a , όπου d vector και a matrix... Φυσικά ο τελεστής επικάλυψης = δεν μπορεί να κάνει απευθείας και τη δήλωση της d που σημαίνει ότι πιο πρίν θα πρέπει να έχουμε πει ότι το d είναι τυπου Vector, δηλαδή:

Vector d;
d = a;

Αν δεν κάνω συνθήκη αρχικοποίησης για το Vector τότε ο compiler μου χτυπάει...
Χρησιμοποιώ βέβαια 2 editors-compilers, Xcode στο macbook μου, και codeblocks στα windows.... Τη συγκεκριμένη συμπεριφορά τη βγάζει το codeblocks.... Στο Xcode δεν πρόλαβα να τη δοκιμάσω....



Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 26, 2009, 15:48:48 pm
Η άσκηση θέλει να δημιουργήσουμε την κλάσση vector ή να χρησιμοποιήσουμε με include την έτοιμη κλασση που υπάρχει στη C++ (<vector>);


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 26, 2009, 17:54:41 pm
Η άσκηση θέλει να δημιουργήσουμε την κλάσση vector ή να χρησιμοποιήσουμε με include την έτοιμη κλασση που υπάρχει στη C++ (<vector>);

Μπα θελει να δημιουργησεις την κλαση vector απο μονος σου....

Δηλαδη πιστευες οτι με ενα απλο include ειχες ξεμπερδεψει ::)


Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 26, 2009, 17:55:32 pm
<censored>


Title: Re: [C++] 5η Εργασια 2009
Post by: tourb3x on November 26, 2009, 18:38:54 pm
Μόνο μια παρατήρηση... Για να μου δουλέψει σωστά, δηλαδή όταν δίνεις
α[1][2] να σου βγάζει πραγματικά το στοιχείο που είναι στην 1η γραμμή και 2η στηλη έπρεπε να κάνω μια αλλαγή στον τρόπο που δηλώνεις τα στοιχεία στη Matrix, δηλαδή όχι

for ( int i = 0 ; i <  size ;  i++ ) {

κλπ κλπ

αλλά

for ( int i = 1 ; i < = size ; i++ ) {

κλπ κλπ



Καλά αυτό είναι λάθος πρακτική. Στην C/C++ όταν δηλώνεις έναν πίνακα του λες πόσα στοιχεία έχει ο πίνακας και αυτά είναι αριθμημένα απο το 0 μέχρι το Ν-1, όπου Ν το πλήθος των στοιχείων του πίνακα.
πχ

int A[10];

A[0] = 1;
A[9] = 2;
A[10] = 3; // Βλακεία. Ξεπερασες τα ορια του πίνακα και κάνεις corrupt το stack.

Καλύτερα να αλλάξεις την συνάρτηση που κάνεις επικάλυψη για τον operator [] ώστε να σου επιστρέφει το i-1 στοιχείο του πίνακα. Έτσι οι κλήσεις Matrix [10]  θα επιστρέφει το στοιχείο που βρίσκεται στη θέση 9 και που στην πραγματικότητα είναι το 10ο στοιχείο (αφού το πρώτο είναι στη θέση 0).

(Βέβαια στη δισδιάστατη περίπτωση, θα έχεις πρόβλημα γιατι θα έπρεπε να κανεις overload και τον global operator[](float*,int) κάτι που δεν επιτρέπεται.)

Το πιο εύκολο είναι να δηλώσεις τον πίνακά σου με 1 παραπανήσιο στοιχείο έτσι ώστε το M[1][2] να δίνει αυτό που θες (1η γραμμή, 2η στήλη παρόλο που στην πραγματικότητα θα είναι 2η γραμμή 3η στήλη).

Αυτό που ήθελα να τονίσω είναι οτι θέλει προσοχή στην προσπέλαση της μνήμης, σύμφωνα με τα όρια του πίνακα. Απο κει και πέρα κάνεις οτι θες.


Title: Re: [C++] 5η Εργασια 2009
Post by: 4Dcube on November 26, 2009, 19:54:03 pm
Για να κάνετε overload 2D array (hint->google the words) πρέπει να γίνει διπλό overload, επειδή ο τελεστής [] δέχεται ως επικάλυψη μόνο ένα όρισμα.

Για να γίνει αυτό, χρειάζεται ένα προσωρινό αντικείμενο. Γιατί μετά την πρώτη επικάλυψη για το i στοιχείο, αυτό που επιστρέφεται είναι ένα αντικείμενο. Κατόπιν κάνουμε επικάλυψη [] και σε αυτό για το j στοιχείο.

Μόνο που επιστρέφουμε το i-1, j-1 , όπως πρότεινε ο tourb3x


Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 26, 2009, 20:17:16 pm
Υπάρχει link πιο πάνω από περσινή εργασία με μια απλή ανάθεση!
(Δουλεύει!)


Title: Re: [C++] 5η Εργασια 2009
Post by: Αθηρ on November 26, 2009, 23:17:38 pm
Γράφω t[ i ] = z[ i ] - x[ i ]; όπου t,z,x αντικείμενα τυπου vector . Ενώ σε άλλες περιπτώσεις η επικαλυψη του τελεστη [ ] δουλεύει κανονικά, σε αυτή την περίπτωση μου ζητάει Lvalue στο t (κοινώς error: Lvalue required) λόγω του = .Γιατί αυτό; Αν έχει τύχει και σε άλλον αυτό παρακαλώ ας μου προσφέρει τα φώτα του. Ευχαριστώ


Title: Re: [C++] 5η Εργασια 2009
Post by: diutinus on November 27, 2009, 02:01:40 am
Παιδιά με αυτή τη φάση τι κάνουμε;;;
Quote
Στο λογισμικό να ορίζεται ακόμη μια επικάλυψη γενικής χρήσης του τελεστή * τέτοια ώστε η έκφραση a*x όπου a αντικείμενο τύπου matrix και x αντικείμενο τύπου vector να επιστρέφει ένα αντικείμενο τύπου vector στο οποίο το διάνυσμα που υλοποιεί να είναι το γινόμενο του πίνακα που υλοποιεί το αντικείμενο a επί το διάνυσμα που υλοποιεί το αντικείμενο x.

Σημείωση: Η συνάρτηση επικάλυψης του τελεστή * για γενική χρήση να μην οριστεί ως φιλική στις κλάσεις matrix και vector.


?????

Πήγα να την κάνω μέλος της matrix (matrix αριστερά , vector δεξιά), αλλά υπάρχει πρόβλημα επειδή (νομίζω) δεν έχει ακόμα περιγραφεί η vector (αν και έκανα μια δήλωση στην αρχή αρχή "class vector;"

Ideas? :)


Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 27, 2009, 09:09:03 am
Παιδιά με αυτή τη φάση τι κάνουμε;;;
Quote
Στο λογισμικό να ορίζεται ακόμη μια επικάλυψη γενικής χρήσης του τελεστή * τέτοια ώστε η έκφραση a*x όπου a αντικείμενο τύπου matrix και x αντικείμενο τύπου vector να επιστρέφει ένα αντικείμενο τύπου vector στο οποίο το διάνυσμα που υλοποιεί να είναι το γινόμενο του πίνακα που υλοποιεί το αντικείμενο a επί το διάνυσμα που υλοποιεί το αντικείμενο x.

Σημείωση: Η συνάρτηση επικάλυψης του τελεστή * για γενική χρήση να μην οριστεί ως φιλική στις κλάσεις matrix και vector.


?????

Πήγα να την κάνω μέλος της matrix (matrix αριστερά , vector δεξιά), αλλά υπάρχει πρόβλημα επειδή (νομίζω) δεν έχει ακόμα περιγραφεί η vector (αν και έκανα μια δήλωση στην αρχή αρχή "class vector;"

Ideas? :)

#include ...
using namespace std;
class vector;
class matrix;

και μπορείς να τα αναφέρεις χωρίς να έχουν καθοριστεί, όπως της συναρτήσεις.


Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 27, 2009, 09:11:33 am
Γράφω t[ i ] = z[ i ] - x[ i ]; όπου t,z,x αντικείμενα τυπου vector . Ενώ σε άλλες περιπτώσεις η επικαλυψη του τελεστη [ ] δουλεύει κανονικά, σε αυτή την περίπτωση μου ζητάει Lvalue στο t (κοινώς error: Lvalue required) λόγω του = .Γιατί αυτό; Αν έχει τύχει και σε άλλον αυτό παρακαλώ ας μου προσφέρει τα φώτα του. Ευχαριστώ

Στον ορισμό της επικάλυψης του τελεστή βάλε &
π.χ.
float& kati::operator-(){...


Title: Re: [C++] 5η Εργασια 2009
Post by: ak1s on November 27, 2009, 09:52:51 am
dn mporw na katalavw pws tha suntaksoume tn epikalupsi tou telesti [ ]...prospathw edw k meres
alla tpt..mporei kapoios na me voithisei.?


Title: Re: [C++] 5η Εργασια 2009
Post by: Κάρβουνο on November 27, 2009, 10:13:08 am
dn mporw na katalavw pws tha suntaksoume tn epikalupsi tou telesti [ ]...prospathw edw k meres
alla tpt..mporei kapoios na me voithisei.?

Θα με κάνουν μπαμ για σπαμμάρισμα...
Για τρίτη φορα
έτρεξα τον κώδικά σου αυτούσιο βάζοντας τη δική μου κλάση, συνάρτηση αρχικών συνθηκών και συνάρτηση επικάλυψης του τελεστή []
Η δέσμευση γίνεται κανονικά, τα νούμερα αποθηκεύονται και εμφανίζει 4 "οκ" για 2χ2 πίνακα


Code:
#include <iostream.h>
class f_matrix{
int m,n; 
float** mat;
  public:
    f_matrix(int m, int n);
    float* operator[](int a);
};

float* f_matrix::operator[](int a){
  return mat[a];
}

f_matrix::f_matrix(int k, int l){
  int i;
  m=k;
  n=l;
  mat=(float**)malloc(k*sizeof(float*));
  for(i=0;i<k;i++)mat[i]=(float*)malloc(l*sizeof(float));
}

main(){
int c_g,c_s, i, j ;
cout<<"Dwste ton arithmo twn grammwn tou pinaka c!!\n";
cin>>c_g;
cout<<"Dwste ton arithmo twn stilwn tou pinaka c!!\n";
cin>>c_s;
f_matrix c(c_g,c_s);
for (i=0;i<c_g;i++) {
for (j=0;j<c_s;j++) {
cout<<"Dwste to stoixeio ["<<i+1<<","<<j+1<<"] tou pinaka c!!\n";
cin>>c[i][j];
            cout<<"ok";
}
}
cout<<c[0][1];
cin>>i;
}


edit:
ψάχνοντας στα γρήγορα, απότι φαίνεται είναι θέμα μνήμης
http://www.faqs.org/qa/qa-673.html
μπορεί να μην είναι σωστή η δέσμευση (να επιστρέφει για κάποιο λόγο NULL), μπορεί η heap σου να είναι γεμάτη και άλλα τόσα μπορεί


ΠΡΟΣΟΧΗ ο κώδικας είναι για μπόρλαντ.


Title: Re: [C++] 5η Εργασια 2009
Post by: provataki on November 27, 2009, 15:04:36 pm
αντωνη σ'αγαπω... :D


Title: Re: [C++] 5η Εργασια 2009
Post by: frou_ira on November 27, 2009, 18:24:54 pm
Code:
class matrix
{
int n;
float **m;
public:
matrix(int a);
float* operator[](int i,int j);
vector operator*(matrix t);
int get_n();
};

μου βγάζε λάθος :see declaration of 'matrix' στη 2η σειρά (δλδ στο πρωτο άγκιστρο).
Κανείς καμιά βοήθεια;


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 27, 2009, 18:30:15 pm
Ο τελεστης [] δεχεται μονο ενα ορισμα ;)


Title: Re: [C++] 5η Εργασια 2009
Post by: provataki on November 27, 2009, 19:17:35 pm
Κερναω λουκουμακι οποιο μου απαντησει στα εξης ερωτηματα:
1. πως γινεται η επικαλυψη γενικης χρησης;
2. ο πινακας x τι στο πεος περιεχει;
3. ποια ειναι η συνθηκη του αλγοριθμου επιλυσης του συστηματος;




Title: Re: [C++] 5η Εργασια 2009
Post by: ak1s on November 27, 2009, 19:23:32 pm
class matrix {
protected:
float **a;
int m,n;
public:
 matrix(int i,int j);
 ~matrix();
 float* operator[](int c);
};

exw auton tn kwdika.dimiourgw tn vector ws public paragomeni apo tn matrix
gt o compiler m vgazei error oti i metavliti a einai protected;;


Title: Re: [C++] 5η Εργασια 2009
Post by: provataki on November 27, 2009, 19:24:28 pm
μου βρωμαει λανθασμενη τεχνικη. :o


Title: Re: [C++] 5η Εργασια 2009
Post by: Ianna on November 27, 2009, 20:11:51 pm
Κι εγώ αυτό έκανα...πως γίνεται να είναι λάθος η τεχνική αφού η μία κλάση χρειάζεται πραγματα από την άλλη...αυτό μόνο με κληρονομικότητα μπορούμε να το κάνουμε...

Tελικά δουλεύει και χωρίς κληρονομικότητα και νομίζω πως είναι πιο σωστό..


Title: Re: [C++] 5η Εργασια 2009
Post by: provataki on November 27, 2009, 20:15:14 pm
καλα αν επιμενετε....  :D :D :D :D

τον κωδικα που κανει πολλαπλασιασμο matrix*vector τον εχει καποιος να τον κανει ενα copy γιατι ποναει το μυαλο μου και δε μπορω να τον υλοποιησω;


Title: Re: [C++] 5η Εργασια 2009
Post by: tourb3x on November 28, 2009, 22:22:57 pm
Για κάποιο λόγο δεν μου κάνει quote...
Είπε το provataki:
-----------------------
Κερναω λουκουμακι οποιο μου απαντησει στα εξης ερωτηματα:
1. πως γινεται η επικαλυψη γενικης χρησης;
2. ο πινακας x τι στο πεος περιεχει;
3. ποια ειναι η συνθηκη του αλγοριθμου επιλυσης του συστηματος;
-----------------------

1. Πολύ απλά. Έξω απο κάθε κλάση χύμα στο κύμα γράφεις

vector operator*(matrix m,vector v)
{

}

2. Για ποιόν πίνακα x μιλάς;
3. Δεν το λέει η εκφώνηση; (όταν το μέτρο της διαφοράς των δύο διανυσμάτων z,x είναι αρκετά μικρό, πχ <0.001)


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 28, 2009, 22:26:20 pm
2. γεμισε των στην αρχη με 0 και μετα θα περνει τις τιμες του z οπως λεει ο αλγοριθμος


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 28, 2009, 22:46:16 pm
στην κλαση vector, τα διανυσματα ποσων διαστασεων θα ειναι;;; 8))


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 28, 2009, 22:49:04 pm
Προφανως οσο ειναι και ο πινακας a (κλαση matrix)!


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 28, 2009, 23:06:00 pm
κατσε ρε....
ενα διανυσμα ειναι ενας πινακας-γραμμη ή ενας πινακας-στηλη
ο πινακας α ειναι 2 διαστασεων! ^banned2^

 ^sfyri^


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 28, 2009, 23:09:48 pm
Βασικα νομιζα το μεγεθος του :P


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 28, 2009, 23:14:44 pm
δηλαδη; :o :D


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 28, 2009, 23:18:09 pm
Θα φτιαξεις εναν πινακα μιας διαστασης με μεγεθος οσο το μεγεθος του a (ο a ειναι τετραγωνικος) ;)


Title: Re: [C++] 5η Εργασια 2009
Post by: Anastacia on November 28, 2009, 23:31:17 pm
Δηλαδή υπάρχει η ορολογία "επικάλυψη τελεστών γενικής χρήσης";


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 28, 2009, 23:44:36 pm
μου λεει ο κομπιλερ:

`vector vector::operator=(vector, matrix)' must take exactly one argument
`vector vector::operator*(vector, vector)' must take either zero or one argument
`vector vector::operator+(vector, vector)' must take either zero or one argument
`vector vector::operator-(vector, vector)' must take either zero or one argument
`vector vector::operator/(vector, vector)' must take exactly one argument
`vector vector::operator[](vector, int)' must take exactly one argument
`vector vector::operator++(vector)' must take `int' as its argument

τι ζορι τραβαει;;; :P


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 28, 2009, 23:50:40 pm
@Anastacia: Μ'αυτο εννοει οτι η επικαλυψη δεν θα ειναι μελος καμιας κλασης αλλα το λεει με τον τροπο του (Κορτεσης ειναι αυτος) :P


@Αλυτος: Ρε αχρηστε μεσα στην παρενθεση βαζεις μονο την δευτερη κλαση... Αφου οι επικαλυψεις ειναι μελοι της κλασης vector εννοειται οτι αριστερα του τελεστη θα υπαρχει αντικειμενο τυπου vector. Δηλαδη θα γραψεις "vector vector::operator=(matrix);"


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 28, 2009, 23:52:15 pm
αντε βρε :D :D :D ^super^


Title: Re: [C++] 5η Εργασια 2009
Post by: Anastacia on November 29, 2009, 00:00:14 am
@Anastacia: Μ'αυτο εννοει οτι η επικαλυψη δεν θα ειναι μελος καμιας κλασης αλλα το λεει με τον τροπο του (Κορτεσης ειναι αυτος) :P

Γιατί εμένα μου έχει δημιουργηθεί η εντύπωση από τα ένα εκατομμύριο παραδείγματα που έχω διαβάσει από διάφορες πηγές ότι οι επικαλύψεις γίνονται είτε με συναρτήσεις μέλη είτε με φιλικές?
Πήρε το μάτι μου κάτι για συναρτήσεις μη-μέλη, αλλά η πρόταση συνέχιζε με "..αν κ συχνά είναι φίλια.." (σλδ. 352 της C++ από το μηδέν) κ παράδειγμα μη-φίλιας&&μη-μέλους δεν υπάρχει.

Γιατί να πρέπει να γράψεις την επικάλυψη έξω από ΚΑΘΕ κλάση?


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 29, 2009, 00:06:32 am
Δεν ξερω ρωτα τον κορτεση :D :D :D :D :D :D :D


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 29, 2009, 01:49:06 am
καταρχας: ^curses^ ^curses^ ^boil^
κατα δευτερον: πειραζει αν τις μεταβλητες της κλασης matrix τις βαλω public? ^dontknow^ ^lypi^


Title: Re: [C++] 5η Εργασια 2009
Post by: Papatanasis on November 29, 2009, 01:57:35 am
δε νομιζω οτι θα πειραξει καποιον.


Title: Re: [C++] 5η Εργασια 2009
Post by: jason_ on November 29, 2009, 18:22:24 pm
Μπορεί να μου πει κάποιος που στο πούτσο χρησιμοποιείται η επικάλυψη του τελεστή "++" σε όλη την εργασία;

Μόνο εμένα μου φαίνεται άχρηστος;

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


Title: Re: [C++] 5η Εργασια 2009
Post by: Ianna on November 29, 2009, 19:03:39 pm
Μπορεί να μου πει κάποιος που στο πούτσο χρησιμοποιείται η επικάλυψη του τελεστή "++" σε όλη την εργασία;

Μόνο εμένα μου φαίνεται άχρηστος;

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


Στη main θα βάλεις και ένα for και μια while...Στην while θα χρησιμοποιήσεις την επικάλυψη του τελεστη ++ .


Title: Re: [C++] 5η Εργασια 2009
Post by: provataki on November 29, 2009, 19:37:07 pm
μπορει καποιος να μου δωσει τον αλγοριθμο που κανει πολλαπλασιασμο matrix*vector?:P ;D


Title: Re: [C++] 5η Εργασια 2009
Post by: tolisn on November 29, 2009, 20:21:42 pm
μπορει καποιος να μου δωσει τον αλγοριθμο που κανει πολλαπλασιασμο matrix*vector?:P ;D

Code:
vector operator*(matrix a,vector x){

int size;
int i,j;
float *sum;
size= a.get_dim();
vector temp(size);

if((sum=(float*)malloc(size*sizeof(float)))==NULL){

cout << "Allocation Failure";
exit(1);
}


for(i=0;i<size;i++){

for (j=0;j<size;j++){

sum[i]=sum[i]+(a[i][j]*x[j]);

}

}


temp.set_v(sum);

return temp;


}

@Apolitistos:

Εγώ έφτιαξα ενα αντικείμενο τύπου vector u το οποίο ηταν u = z-x. και μετα ++u υλοποίησα το αθροισμα απολύτων που λεει στην αρχη της ασκησης για τον αλγόριθμο..

Μπορεί καποιος να μου επιβεβαιωσει οτι το μεγιστο ειναι 20 επαναλήψεις για να βρει το διανυσμα x=[1,1,1] ?


Title: Re: [C++] 5η Εργασια 2009
Post by: Αιμιλία η φτερωτή χελώνα on November 29, 2009, 21:29:18 pm
η vector ειναι public της matrix???
ναι η οχι?

 :(


Title: Re: [C++] 5η Εργασια 2009
Post by: tolisn on November 29, 2009, 21:35:54 pm
η vector ειναι public της matrix???
ναι η οχι?

 :(

Στην υλοποίηση μου οι κλάσεις είναι ανεξάρτητες μια και δεν το απαιτει η ασκηση να ειναι η μια παραγωγη της αλλης και ο δυαδικός τελεστης * μπορει να επικαλυφθει οταν δεν ειναι μελος καποιας κλασησ με 2 ορισματα ακριβως οπως το εκανα παραπανω.

Μετά απο εξονυχιστικη εξέταση για το συστημα 3x3  που μας δίνει και για e=0.000001 μου βγάζει οτι μετά απο 20 επαναλήψεις  το αποτέλσμα είναι  x[1]=1,x[2]=1,x[3]=1   8))


Title: Re: [C++] 5η Εργασια 2009
Post by: Τσαμπίκα on November 29, 2009, 21:53:16 pm
Ρε παιδιά να ρωτήσω κάτι?Έχει κάνει κανείς τη main με τα αθροίσματα(Σxi-zi) κλπ????  :???:


Title: Re: [C++] 5η Εργασια 2009
Post by: Τσαμπίκα on November 29, 2009, 22:07:43 pm
Κάποιος ρε παιδιά????? :-\ :-\ :-\


Title: Re: [C++] 5η Εργασια 2009
Post by: tolisn on November 29, 2009, 22:11:47 pm
Κάποιος ρε παιδιά????? :-\ :-\ :-\

Ναι αλλά προφανώς η καθε main διαφέρει κάπως ανάλογα με το τι έχεις κάνει πιο πάνω...Θα μπορούσες να ρωτήσεις κάτι πιο συγκεκριμένο η να πεις που κολλάς για να βοηθήσουμε ίσως?


Title: Re: [C++] 5η Εργασια 2009
Post by: Τσαμπίκα on November 29, 2009, 22:14:27 pm
Εννοώ πώς δημιουργείς το αντικείμενο z,και για παράδειγμα το χ το ζητάς από τον χρήστη?


Title: Re: [C++] 5η Εργασια 2009
Post by: Τσαμπίκα on November 29, 2009, 22:19:19 pm
Εννοώ πώς δημιουργείς το αντικείμενο z,και για παράδειγμα το χ το ζητάς από τον χρήστη?

Θεωρείται άγνωστο έτσι δεν είναι?


Title: Re: [C++] 5η Εργασια 2009
Post by: tolisn on November 29, 2009, 22:22:03 pm
Εννοώ πώς δημιουργείς το αντικείμενο z,και για παράδειγμα το χ το ζητάς από τον χρήστη?


Code:
        vector x(size);
        for(n=0;n<i;n++){
x[n]=0;
}
το θέτω δηλαδή αρχικα x=[0,0,0]
Όσο για το z αφου το ορίσεις σαν αντικείμενο της κλάσης vector και εχεις κανει σωστα την επικάλυψη όλων των τελεστών ο τύπος που
δίνει ο Κορτέσης z=(b-a*x+d*x)/d  δουλεύει ρολόι. Αυτουσιο τον βάζεις στο loop με τον αριθμό των μέγιστων επαναλήψεων και μεσα στο ίδιο loop θέτεις ενα u= z-x  και κανεις εναν ελεγχο αν το ++u σε σχεση με τον πολυ μικρο αριθμο e



Title: Re: [C++] 5η Εργασια 2009
Post by: Τσαμπίκα on November 29, 2009, 22:27:06 pm
Α οκ!Το 'πιασα!Τhanks!To e το διαβάζω στη main? ;)


Title: Re: [C++] 5η Εργασια 2009
Post by: tolisn on November 29, 2009, 22:30:25 pm
Α οκ!Το 'πιασα!Τhanks!To e το διαβάζω στη main? ;)

Ναι :) Τουλάχιστον εγω το ζητάω απο τον χρήστη στην main


Title: Re: [C++] 5η Εργασια 2009
Post by: Katarameno on November 29, 2009, 23:24:48 pm
http://www.thmmy.gr/smf/index.php?topic=10563.msg677541#msg677541 (http://www.thmmy.gr/smf/index.php?topic=10563.msg677541#msg677541)  :P ;)


Title: Re: [C++] 5η Εργασια 2009
Post by: atalanta on November 30, 2009, 00:02:01 am
Εννοώ πώς δημιουργείς το αντικείμενο z,και για παράδειγμα το χ το ζητάς από τον χρήστη?


Code:
        vector x(size);
        for(n=0;n<i;n++){
x[n]=0;
}
το θέτω δηλαδή αρχικα x=[0,0,0]
Όσο για το z αφου το ορίσεις σαν αντικείμενο της κλάσης vector και εχεις κανει σωστα την επικάλυψη όλων των τελεστών ο τύπος που
δίνει ο Κορτέσης z=(b-a*x+d*x)/d  δουλεύει ρολόι. Αυτουσιο τον βάζεις στο loop με τον αριθμό των μέγιστων επαναλήψεων και μεσα στο ίδιο loop θέτεις ενα u= z-x  και κανεις εναν ελεγχο αν το ++u σε σχεση με τον πολυ μικρο αριθμο e


Δεν μπορω να καταλαβω τι θα εχει το x στην σχεση που δινει και γιατι το βαζεις 0 στην αρχη??καμια βοηθεια κανεις????


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on November 30, 2009, 00:04:21 am
Στην 1η επαναληψη το x θα εχει την τιμη [0,0,0]. Μετα θα βρεις το z

Αν Σ|xi-zi|>e τοτε δινεις στο x την τιμη του z και ξανακανεις την ιδια διαδικασια μεχρι Σ|xi-zi|<e


Title: Re: [C++] 5η Εργασια 2009
Post by: atalanta on November 30, 2009, 00:06:42 am
Στην 1η επαναληψη το x θα εχει την τιμη [0,0,0]. Μετα θα βρεις το z

Αν Σ|xi-zi|>e τοτε δινεις στο x την τιμη του z και ξανακανεις την ιδια διαδικασια μεχρι Σ|xi-zi|<e


ooo thnx!! :)


Title: Re: [C++] 5η Εργασια 2009
Post by: il capitano on December 19, 2009, 15:43:09 pm
the solution :)