Προς το περιεχόμενο
  • 0
oallosmoueautos

Ασκησουλα με πινακες C++

Ερώτηση

Να γραφεί πρόγραμμα το οποίο να δεχεται από τη γραμμη εντολών τη διάσταση

Ν δύο άνω τριγωνικών πινάκων ακεραίων. Πιο συγκεκριμένα, θα εχει Ν γραμμες. Η

πρώτη γραμμη του κάθε πίνακα κα εχει Ν κελιά. Η δευτερη γραμμη του πίνακα θα

εχει Ν-1 κελιά κ.ο.κ. Το πρόγραμμά σας θα δεσμευει δυναμικά μνημη (με τον

τελεστη new) για τους δυο πίνακες και θα τους γεμίζει διαβάζοντας τιμές από το

cin. Εν συνεχεία κα τους προσθετει και κα τυπώνει το αποτελεσμα.

 

Καμια υποδειξη μπορειτε να μου δώσετε?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

11 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0

Με ενα array απο pointer σε int δεν ειναι προτιμοτερο να γίνει απο θέμα μνημης?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Υποδειξη (μπορεις να παραβλεψεις οτι ήδη εχεις κανει/ξερεις)

 

1) Γραψε, μεταγλωτισσε και τρεξε ενα προγραμμα που γραφει "Hello World" (ή οτι εσυ θες) στην οθονη. (Hint, χρηση std::cout)

2) Περασμα ορισματων. Μαθε πως παιρνεις όρισμα απο τη γραμμη εντολών (google for command line arguments). Παρε την τιμη Ν απο το χρήστη (ενας ακεραιος ειναι) και τυπωσε το ορισμα στην οθονη, του στυλ " User input was: 1821"

3) Δυναμική δέσμευση πίνακα. Φτίαξε ένα πινακα ακεραιων Ν στοιχειων (οπου Ν ειανι η μεταβλητη που έδψσε ο χρηστης στο βημα 2). Μετα δοκιμασε να τον κανεις ΝΧΝ. Αντιστοιχη συζητησουλα εδω http://www.cplusplus.com/forum/beginner/63/ ενω επισης μπορεις να google-αρεις για dynamic 2-dimensional arrays. Θα το κανεις 2 φορες, για τους 2 πινακες

4) Γεμισμα τιμων. Εδω εχει λιγο μανουρα, θα πρεπει να παιρνεις μια-μια τις τιμε απο το χρηστη και να τις βαζεις στον πινακα, θα γινει μεσα σε διπλο for loop (δηλ ενα for μεσα σε ένα άλλο for).Του στυλ, για κάθε γραμμη, για καθε στηλη, ζητα απο το χρηστη το στοιχειο για την αντιστοιχη γραμμη/στηλη. Catch: επειδη ειναι άνω τριγωνικος πινακας, στο 2ο for (το πιο μεσα, που μετραει στηλες), η αρχικη τιμη θα πρεπει να ειναι καθε φορα ενα παραπανω

γενικο πχ

>
for(int row = 0; row < N; row++)
{
   for(int column = row; column < N; column++)
   {
	  cout << "Give value for " << row << ", " << column << ": ";
	  cin >> array[row][column];
   }
}

Θα επαναλαβεις το ιδιο και για τον 2ο πινακα

5) Εκτυπωση των περιεχομενων διδιαστατου πινακα. Αν και γινεται τελευταιο, ειναι χρησιμο να το κανεις πρωτα ωστε να ελεγξεις αν εβαλες τις τιμες σωστα.

6) Προσθεση 2 διδιαστατων πινακων. Θα χρειαστει να φτιαξεις ακομα ενα πινακα (βημα 3) για να κρατησεις το αποτελεσμα. Google for it. Bonus αν το οπτιμαρεις για ανω-τριγωνικους πινακες, δηλαδη δε προσπαθησεις να προσθεσεις τα στοιχεια που ξερεις πως ειναι μηδενικα ετσι και αλλιως.

7) Εκτυπωση του αποτελεσματoς

 

Καλη επιτυχια

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ναι, διδιαστατος και ο χώρος του αποθηκεύεται έτσι

>
  int** ar = (int**) malloc(sizeof(int*) * N);
  for (i = 0; i < N; i++) 
         ar[i] = (int*) malloc(sizeof(int) * N);

 

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Εχει αρκετη δουλίτσα δηλαδη.. Δεν ειναι τοσο απλο οσο ακουγεται.. Σιγουρα δεν εχει κανα πιο ευκολο τροπο με λιγότερο κώδικα?

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Ναι, διδιαστατος και ο χώρος του αποθηκεύεται έτσι

>
int** ar = (int**) malloc(sizeof(int*) * N);
for (i = 0; i < N; i++)
ar[i] = (int*) malloc(sizeof(int) * N);

 

 

Δεν νομίζω ότι είναι καλή ιδέα δέσμευση μνήμης με malloc στη C++.

 

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

  • Like 2

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν νομίζω ότι είναι καλή ιδέα δέσμευση μνήμης με malloc στη C++.

 

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

 

Σωστό, νόμιζα C (αν και το λέει στον τίτλο)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Δεν νομίζω ότι είναι καλή ιδέα δέσμευση μνήμης με malloc στη C++.

 

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

 

Αν θες κανεις ενα παραδειγμα να το δω?.. στο ιδιο ακριβως που εβαλε ο φίλος για να συγκρινω..

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Μ' αρεσει που σου εδωσα και λινκ.......

Αντε να κανω paste

 

>
#include <iostream.h>
void main() {
const int rows = 4;
const int cols = 4;
// declaration
int ** a;
// allocation
a = new int*[rows];
for(int i = 0; i < rows; i++)
 a[i] = new int[cols];
// initialization
for(int j = 0; j < rows; j++)
 for(int i = 0; i < rows; i++)
  a[i][j] = 0;
}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Μ' αρεσει που σου εδωσα και λινκ.......

Αντε να κανω paste

 

>
#include <iostream.h>
void main() {
const int rows = 4;
const int cols = 4;
// declaration
int ** a;
// allocation
a = new int*[rows];
for(int i = 0; i < rows; i++)
a[i] = new int[cols];
// initialization
for(int j = 0; j < rows; j++)
for(int i = 0; i < rows; i++)
a[i][j] = 0;
}

 

Ναι ωραια.. δεν το ειχα δει το λινκ.. Ευχαριστω πολυ.. Μπραβο ρε παιδια παντως ατσίδες ειστε.. Να κανουμε παρέα να μου μαθετε και μενα τιποτε.. Παω να εργαστω..

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε έναν λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι εύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
×
×
  • Δημιουργία νέου...

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.