Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

...ασύγχρονα μαθήματα γλώσσας C

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό konnn » 30 Μαρ 2011, 00:00

linuxs έγραψε:σαν τι κείμενο περιμένουμε να εμφανιστεί;;; για το printf λες;;;

Ναι γι' αυτό..άλλωστε αυτό δεν είναι και το θέμα του νήμματος;
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό linuxs » 30 Μαρ 2011, 00:06

Εκτός και υπαρξει κάποιο error message. Είναι και αυτό πιθανό στο προγραμματισμό. εδώ το μόνο που υπάρχει ως έξοδος είναι αυτό. Συμφωνώ.
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό linuxs » 30 Μαρ 2011, 00:26

Στο αρχικό πρόγραμμα! Μια πρώτη ανάλυση είναι η απρακάτω:

Κώδικας: Επιλογή όλων
#include <stdio.h> /* προσθήκη της βασικής βιβλιοθήκης */

int calculate(void)
{
int i;
int p[9]; /* Ορισμός ενός 'πίνακα' 9 θέσεων! */
/* Τα στοιχεία του είναι απο [0 - 8] */
for(i=0; i<=3; i++) /* εκτέλεση μιας επανάληψης απο 0 έως ΚΑΙ 3 */
{
if(sizeof(int*) == 8) /* 64μπιτο σύστημα */
{
printf("64bit system!\n");
p[i*6 + 2] += 15;
printf("-> access possition: %d | write possition: %d\n", i*6+2, p[i*6+2]);
}else{ /* 32μπιτο σύστημα */
printf("32bit system!\n");
p[i*3 + 2] += 16;
printf("-> access possition: %d | write possition: %d\n", i*3 + 2, p[i*6+2]);
}
}
}

int main() /* κυρίως συνάρτηση*/
{
calculate(); /* καλούμε την calculate */
printf("Hello, World!\n"); /* εκτύπωση του μηνύματος */

return 0; /* επιστροφή του μηδενός */
}

/* =================================
Επιπλέον πληροφορίες...
===================================*/
/*
Σχετικά με το sizeof(): το sizeof() είναι μια συνάρτηση που μας επιστρέφει το μέγεθος των bytes στο
παράδειγμά μας των ακεραίων. Οπότε, στην *10* γραμμή τσεκάρουμε αν το μέγεθος των bytes των ακεραίων είναι 8.
Χωρίς να είμαι ΑΠΟΛΥΤΩΣ σίγουρος φαντάζομαι πως το μέγεθος που ένα σύστημα έχει καθορίσει για τους ακεραίους
αλλάζει απο 32μπιτο σε 64μπιτο. Οπότε στον 64μπιτο θα είναι 8. Απο εκεί και πέρα στην 12 και 14 γραμμή προσπαθούμε
να προσπελάσουμε κάποια ΔΙΑΦΟΡΕΤΙΚΑ κελιά με την χρήση του loop(που εκτελείται παραλληλα). Εάν δώσουμε λίγο
περισσότερο βαρύτητα στις τιμές που παίρνει θα δούμε οτι οι πιθανές τιμές για 64μπιτο είναι: 2,8,14,20 και στον
32μπιτο αντίστοιχα: 2,5,8,11. Μπορούμε πολύ εύκολα να δούμε οτι καθώς τρέχει το loop βγαίνουμε έξω απο τα όρια του πίνακα.
Γι' αυτό άλλωστε μας απιστρέφει και σκουπίδια.
*/


Απορίες:
Το * στο sizeof γιατί χρησιμοποιείται;;;

ευχαριστώ...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό konnn » 30 Μαρ 2011, 00:31

Απορίες:
Το * στο sizeof γιατί χρησιμοποιείται;;;

ευχαριστώ...[/quote]
Ποιά η χρήση του * στον προ/σμο;
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό linuxs » 30 Μαρ 2011, 00:35

Γενικά γενικά...ως pointer φυσικα. Το κεφάλαιο που λείπει απο την συλλογή! ;) Εδώ όμως;;;
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό konnn » 30 Μαρ 2011, 00:45

linuxs έγραψε:Γενικά γενικά...ως pointer φυσικα. Το κεφάλαιο που λείπει απο την συλλογή! ;) Εδώ όμως;;;


Τι θα έπρεπε να βάλει στη θέση του int * για να τρέξει το πρόγραμμα ή
έγραψε:Οπότε, στην *10* γραμμή τσεκάρουμε αν το μέγεθος των bytes των ακεραίων είναι 8.
Τελευταία επεξεργασία από konnn και 30 Μαρ 2011, 00:54, έχει επεξεργασθεί 2 φορά/ες συνολικά
1 Linux: Μέτριος ┃ Προγραμματισμός: Μέτριος ┃ Αγγλικά: Προχωρημένος
2 Desktop : Ubuntu 16.04 64bit
a Intel Core i3 CPU 530 2.93GHz ‖ RAM 3824 MiB ‖ Intel DH55HC -
b nVidia Device [10de:1040] (rev a1)
c eth0: Intel 82578DC Gigabit Network Connection
3 Notebook : Ubuntu 16.04 64 bit
a Intel Core i3-2365M CPU @ 1.40GHz ‖ RAM 3854 MiB ‖ LENOVO 20197
b Intel 2nd Generation Core Processor Family Integrated Graphics Controller
c 5 wlan0: Intel Centrino Wireless-N 2230 ⋮ eth0: Realtek RTL8101E/RTL8102E

Αυτόματη υπογραφή.
Άβαταρ μέλους
konnn
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 3568
Εγγραφή: 12 Ιούλ 2010, 17:54
Τοποθεσία: Καλαμάτα
Launchpad: konnn
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό linuxs » 30 Μαρ 2011, 00:46

Στο πρόγραμμά μας το * τι σημαίνει δηλαδή ;;; Γιατί το χρησιμοποιούμε;;;
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό sokoban4ever » 30 Μαρ 2011, 02:11

linuxs έγραψε:Στο πρόγραμμά μας το * τι σημαίνει δηλαδή ;;; Γιατί το χρησιμοποιούμε;;;

Μια διευκρίνηση
Tο sizeof(int*) υπολογίζει το μέγεθος του integer pointer
σε 32bit συστήματα είναι 4 bytes και σε 64bit είναι 8 bytes....

Το σύμβολο * είναι το σύμβολο του pointer( δείκτης )
και σημαίνει ότι δείχνει σε μια περιοχή στην μνήμη.
Χρησιμοποιείτε για να έχεις πρόσβαση σε δομές δεδομένων σε άλλους pointers και σε συναρτήσεις ( πχ για να τις εκτελείς )
επίσης επειδή είναι οργανωμένη και δομημένη η μνήμη και δεν είναι χύμα σαν μια λίμνη
και έτσι μπορείς να κάνει και pointer arithmetic και πολλά ωραία πράγματα
όμως θέλουν προσοχή γιατί εύκολα γίνονται πολύπλοκα τα προγράμματα...
http://www.cprogramming.com/tutorial/lesson6.html
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Άσκηση C: γιατί δεν τυπώνεται το μήνυμα;

Δημοσίευσηαπό linuxs » 30 Μαρ 2011, 04:09

sokoban4ever έγραψε:
linuxs έγραψε:Στο πρόγραμμά μας το * τι σημαίνει δηλαδή ;;; Γιατί το χρησιμοποιούμε;;;

Μια διευκρίνηση
Tο sizeof(int*) υπολογίζει το μέγεθος του integer pointer
σε 32bit συστήματα είναι 4 bytes και σε 64bit είναι 8 bytes....

Το σύμβολο * είναι το σύμβολο του pointer( δείκτης )
και σημαίνει ότι δείχνει σε μια περιοχή στην μνήμη.
Χρησιμοποιείτε για να έχεις πρόσβαση σε δομές δεδομένων σε άλλους pointers και σε συναρτήσεις ( πχ για να τις εκτελείς )
επίσης επειδή είναι οργανωμένη και δομημένη η μνήμη και δεν είναι χύμα σαν μια λίμνη
και έτσι μπορείς να κάνει και pointer arithmetic και πολλά ωραία πράγματα
όμως θέλουν προσοχή γιατί εύκολα γίνονται πολύπλοκα τα προγράμματα...
http://www.cprogramming.com/tutorial/lesson6.html


Σωστός! Εγώ θα το έκανα έτσι όταν θέλω να φτιάξω έναν διδιάσταστο πχ πίνακα. Δοκίμασε να το βγάλεις και πάλι το ίδιο αποτέλεσμα παίρνεις. Αλλα δεν είναι το ίδιο προγραμματιστικά.
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Προηγούμενη

Επιστροφή στο Μαθήματα C

cron