Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 06 Μάιος 2012, 16:45

@c7p
Καλύτερα δώσε τον κώδικα για να δούμε που είναι το λάθος.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό c7p » 06 Μάιος 2012, 18:39

Κώδικας: Επιλογή όλων

while(condition){
for(i=0 ; i<N-1 ; i++)
{
if(connection[x][i] > -1)
{
flag = 0 ;

for(k=0; k<j+1 ; k++ )
{
if(road[k]==connection[x][i]) goto label ;
}

if(weight[x][i] < weight[x][tmpi])
{
tmpi = i ;
}
}

label:
}
}


@stamatiou: Το δοκίμασα ως statement, ναι μεν δεν χτυπούσε άλλα έχω την εντύπωση πως δεν λειτουργούσε όπως θέλω, δλδ. έτρεχε την "if(weight[x][i] < weight[x][tmpi])" .

Update: Άκυρο άλλαξα λίγο την δομή του προγράμματος και δουλεύει χωρίς goto, αν έχετε ιδέα γιατί μου έβγαζε το μήνυμα πείτε για να το ξέρουμε για άλλη φορά.
Άβαταρ μέλους
c7p
powerTUX
powerTUX
 
Δημοσιεύσεις: 1849
Εγγραφή: 30 Μάιος 2009, 16:09
Τοποθεσία: Κατερίνη
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 06 Μάιος 2012, 18:58

Ναι, είναι αυτό που λέει ο stamatiou. Πρέπει να υπάρχει κάτι μετά απ' την label.
Βέβαια ίσως είναι καλύτερα να αποφύγεις την χρήση της goto.

Επίσης κάτι άσχετο, όταν έχεις μονάχα ένα statement ή μια εντολή μέσα στο σώμα ενός statement τα braces δεν είναι απαραίτητα.
Δηλαδή το παραπάνω κομμάτι μπορεί να γραφεί:
Μορφοποιημένος Κώδικας: Επιλογή όλων
while(condition) {
for(i = 0; i < N - 1; i++) {
if(connection[x][i] > -1) {
flag = 0;
for( k = 0; k < j + 1; k++)
if(road[k] == connection[x][i])
goto label;

if(weight[x][i] < weight[x][tmpi])
tmpi = i;
}
label: ;
}
}
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 06 Μάιος 2012, 19:07

Επίσης θα δούλευε αν υπήρχε και statement μετά απο το label, πχ μια printf.....
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 07 Μάιος 2012, 13:15

έγραψε:
EDIT2: Στο 1ο Project έχω γράψει αυτό αλλά για κάποιο λόγο παίρνω error και warings: http://ideone.com/tuh0C

Ο σωστός κώδικας είναι εδώ: http://ideone.com/X5FcZ αλλά αν ήθελα να μη κάνει τίποτα το δεύτερο μέρος της σειράς 10, τι θα έπρεπε να γράψω;
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 07 Μάιος 2012, 14:06

stamatiou έγραψε:
EDIT3: Στο 10ο Project ο κώδικάς μου δεν αγνοεί το 0/0/0: http://ideone.com/ITHgs. Θα το κοίταζα με debugger αλλά αυτή τη στιγμή είμαι σε άλλο υπολογιστή

Δεν νομίζω να έχω δει πιο χαζό bug :P
http://ideone.com/SyrrF
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 07 Μάιος 2012, 18:07

Έχει καταλάβει κανείς την τελευταία ερώτηση στη σελίδα 152 γιατί εγώ δεν έχω καταλάβει τίποτα.
EDIT: Επίσης γιατί στη σελίδα 153 στην 3η ερώτηση μας λέει πως θα υπάρχει πρόβλημα αν χρειαστεί το ch να γίνει integer;
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 10 Μάιος 2012, 15:41

stamatiou έγραψε:Έχει καταλάβει κανείς την τελευταία ερώτηση στη σελίδα 152 γιατί εγώ δεν έχω καταλάβει τίποτα.

Πιστέυω τα λέει καθαρά. Πέρα όμως από αυτό let me google that for you :P

έγραψε:EDIT: Επίσης γιατί στη σελίδα 153 στην 3η ερώτηση μας λέει πως θα υπάρχει πρόβλημα αν χρειαστεί το ch να γίνει integer;

Γιατί αν περιέχει 8-μπιτη τιμή τότε σε απεικόνιση integer το 1 από τα 8 μπιτ δηλώνει το πρόσημο.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό stamatiou » 12 Μάιος 2012, 12:32

migf1 έγραψε:
stamatiou έγραψε:Έχει καταλάβει κανείς την τελευταία ερώτηση στη σελίδα 152 γιατί εγώ δεν έχω καταλάβει τίποτα.

Πιστέυω τα λέει καθαρά. Πέρα όμως από αυτό let me google that for you :P

έγραψε:EDIT: Επίσης γιατί στη σελίδα 153 στην 3η ερώτηση μας λέει πως θα υπάρχει πρόβλημα αν χρειαστεί το ch να γίνει integer;

Γιατί αν περιέχει 8-μπιτη τιμή τότε σε απεικόνιση integer το 1 από τα 8 μπιτ δηλώνει το πρόσημο.

Βρήκα αυτο http://www.exforsys.com/tutorials/c-lan ... les/3.html . Μιλάει όμως για το σύμβολο e το οποίο δε γνωρίζω.
EDIT: Στη σελίδα 158 στο Project 11,ως γίνεται να υλοποιηθεί το προγράμματα ενώ το βιβλίο δεν έχει ακόμα μιλήσει για arrays;
Επίσης στο project 12,δεν μπορώ να βρω τροπο να το λυσω...
Τώρα στο project 13 προσπαθώ να κάνω το πηλίκο δύο int σε float αλλά δεν μπορώ:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <ctype.h>

#define IN 0
#define OUT 1

int main(void) {
char ch;
int words = 0, let = 0, state = 0;
while((ch = getchar()) != '\n') {
if(ch != ' ') {
let++;
state = IN;
}else {
if(state == IN) {
words++;
}
state = OUT;
}
}
printf("Average letters per word: %f\n", (float ) let / words);
return 0;
}
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 27 Μάιος 2012, 17:26

@Stamatiou πρέπει να ψάξεις για το πως αναπαριστωνται οι αριθμοι κινητης υποδιαστολης σε ενα υπολογιστικο συστημα συμφωνα με το ΙΕΕΕ 754.

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

Για την άσκηση 13 στην 158 έχει δώσει ο migf1 κώδικα και του έχω βάλει εγω πιο αναλυτικά σχόλια... πάρε αυτον αν θες και δοκιμασε να τον διαβασεις και να τον καταλαβεις. Για να παίρνεις ιδέες.

Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <ctype.h> /*Για την συνάρτηση isalnum()*/

int main( void )
{
int ch = '\0'; // Αρχικοποίηση
int wcount = 0, letcount = 0;

printf("Enter a sentence: ");

for (;;) /* Ατέρμων βρόχος που θα σταματήσει μεσω της break */
{
ch = getchar();
if ( isalnum(ch) ) /* Aν η isalnum δίνει TRUE (Δηλαδη ο ch ειναι γράμμα ή αριθμητικό ψηφίο τοτε αύξησε) */
letcount++; /* Το letcount++ , αλλιως προχωρα. */

else {
if ( letcount ) /* Ηδη μέσα στο σώμα της else επειδη η isalnum δεν βρήκε γράμμα ή αριθμό */
wcount++; /* Βρισκεσαι στο τελος της λέξης αρα αυξησε τον wcount */

/* Οσο ο ch δεν ειναι ο χαρακτήρας αλλαγής γραμμής και δεν ειναι αλφαριθμητικο
* συνέχιζε να διαβάζεις καλωντας την getchar και να ελέγχεις χωρις να κανεις τιποτα αλλο
* Αγνόηση των μη αλφαριθμητικών χαρακτήρων */

while ( '\n' != ch && !isalnum(ch=getchar()) )
;
if ( '\n' == ch )
break; /* Έξοδος οταν ο χρήστης πατήσει το ΕΝΤΕR*/
letcount++;
/* Εφοσον λοιπον δωσει ενα αλφαριθμητικο ή αριθμο θα βγεις απο το loop
* και θα πρεπει να αυξησεις τον letcount */
}
}

printf( "%d word(s), %d letter(s)\n", wcount, letcount );
printf( "Avarage word length: %.1f\n", !wcount ? 0 : (float)letcount/wcount ); // Αποφυγή λανθασμένου αποτελέσματος

return 0;
}
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι