Παραδείγματα & Ασκήσεις στην C

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 11 Ιούλ 2011, 12:56

Αυτά είναι :) Go ahead guys!
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 11 Ιούλ 2011, 13:05

Όταν έχουμε ορίσει
Κώδικας: Επιλογή όλων
char **buf;
και κάνουμε με malloc έναν διδιάστατο πίνακα το buf[0] δεν είναι char *?

Παραθέτω και τον κώδικά μου έτσι στα γρήγορα...αλλα κάτι δεν πάει καλά!

Όσοι θέλουν να δοκιμάσουν μόνοι τους μην δείτε τον κώδικα. Μην αντιγράφετε σας παρακαλώ! :lol: :lol: :lol: :lol: :lol:


Spoiler: show
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define M 10

int main(void) {
char sent[100]="this is sparta";
char **buf;
int i, j, flag;
buf = (char **)malloc(N*sizeof(char *));
for(i=0; i<N; i++) {
buf[i] = (char *)malloc(M*sizeof(char));
}

if(buf==NULL) {
printf("Error in allocating space!\n");
exit(1);
}

buf[0] = strtok(sent," ");
flag=1;
while(1){
buf[flag] = strtok(NULL," ");
flag++;
}

for(i=N; i<=0; i--){
for(j=0; j<M; j++) {
printf("buf[%d][%d]: %s", i, j, buf[i]);
}
}
return 0;
}


EDIT: Όταν λέω εγώ να κανω στην αρχή cpy/paste όλες τις βιβλιοθήκες! :lol: :lol:
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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 » 11 Ιούλ 2011, 13:23

migf1 μπορείς να διευκρινήσεις λίγο την εκφώνηση γιατί αυτή είναι η τελική μου
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
#define M 10

int main(void) {
char sent[100] = "this is sparta";
char **buf;
char *buf2;
int i, j, flag;
buf = (char **)malloc(N*sizeof(char *));
for(i=0; i<N; i++) {
buf[i] = (char *)malloc(M*sizeof(char));
}

if(buf==NULL) {
printf("Error in allocating space!\n");
exit(1);
}

buf[0] = strtok(sent," ");
for(i=1; i<3; i++){
buf[i] = strtok(NULL," ");
}

for(i=0; i<N; i++){
printf("buf[%d]: %s\n", i, buf[i]);
}
return 0;
}


αλλα το θέμα είναι οτι μπορώ να κάνω χίλιες αλλαγές. Η είσοδος απο που θα είναι? Απλά να τα εκτυπώνει ανάποδα θέλεις? :/ Αν μπορείς γίνε λίγο πιο συγκεκριμένος1 ;) thx
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 11 Ιούλ 2011, 13:26

linuxs έγραψε:Όταν έχουμε ορίσει
Κώδικας: Επιλογή όλων
char **buf;
και κάνουμε με malloc έναν διδιάστατο πίνακα το buf[0] δεν είναι char *?

Παραθέτω και τον κώδικά μου έτσι στα γρήγορα...αλλα κάτι δεν πάει καλά!

Ναι, αλλά είναι λίγο μπέρδεμα. Γιατί δεν το δηλώνεις: char buf[N][M];

Επίσης, το...
Κώδικας: Επιλογή όλων

while (1){
buf[flag] = strtok(NULL," ");
flag++;
}
δεν σταματάει ποτέ!

Υποθέτω ήθελες να το γράψεις κάπως έτσι:
Κώδικας: Επιλογή όλων

register int i=1;

buf[0] = strtok(sent," ");
while ( i < N && (buf[i] = strtok(NULL," ")) != NULL )
i++;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό migf1 » 11 Ιούλ 2011, 13:29

linuxs έγραψε:
[snip]
αλλα το θέμα είναι οτι μπορώ να κάνω χίλιες αλλαγές. Η είσοδος απο που θα είναι? Απλά να τα εκτυπώνει ανάποδα θέλεις? :/ Αν μπορείς γίνε λίγο πιο συγκεκριμένος1 ;) thx

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 11 Ιούλ 2011, 13:30

migf1 έγραψε:(i=1
migf1 έγραψε:
linuxs έγραψε:Όταν έχουμε ορίσει
Κώδικας: Επιλογή όλων
char **buf;
και κάνουμε με malloc έναν διδιάστατο πίνακα το buf[0] δεν είναι char *?

Παραθέτω και τον κώδικά μου έτσι στα γρήγορα...αλλα κάτι δεν πάει καλά!

Ναι, αλλά είναι λίγο μπέρδεμα. Γιατί δεν το δηλώνεις: char buf[N][M];

Επίσης, το...
Κώδικας: Επιλογή όλων

while (1){
buf[flag] = strtok(NULL," ");
flag++;
}

δεν σταματάει ποτέ!

Υποθέτω ήθελες να το γράψεις κάπως έτσι:
Κώδικας: Επιλογή όλων

register int i=1;

buf[0] = strtok(sent," ");
while ( i < N && (buf[i] = strtok(NULL," ")) != NULL )
i++;

Ναι το κατάλαβα οτι δεν σταματάει. Το έχω αλλάξει ήδη dont worry! ;) Απλά ανάλογα απο που θα είναι η είσοδος θα χρησιμοποιήσω τα κατάληλα εργαλεία...οκ
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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 » 11 Ιούλ 2011, 13:59

Καλη συνέχεια... ;)
Spoiler: show
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
#define M 10

int main(void) {
char sent[100], c;
char **buf;
int i, j;


/* ********** Δημιουργία & έλεγχος διδιάστατου πίνακα ******************** */
buf = (char **)calloc(N,sizeof(char *));
for(i=0; i<N; i++) {
buf[i] = (char *)calloc(M,sizeof(char));
}

if(buf==NULL) {
printf("Error in allocating space!\n");
exit(1);
}

/* ********** Διάβασμα χαρακτήρων μέχρι να πατηθεί το enter ************** */
for(i=0; i<=99; i++) {
if( (c = getchar()) != '\n' ) {
sent[i]=c;
}else{
break;
}
}

/* ******** Κάνουμε κομματάκια τον buf για να τον εκδικιθούμε :P ********* */
buf[0] = strtok(sent," ");
i=1;
while( (buf[i] = strtok(NULL," ")) != NULL) {
i++;
}
printf("The sentence you gave will print tricky!\n");
for(i=N-1; i>=0; i--){
if(buf[i] != NULL)
printf("%s ", buf[i]);
}
printf("\n");
return 0;
}
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 11 Ιούλ 2011, 14:04

Ωραίος!

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

Re: Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 11 Ιούλ 2011, 14:06

Μπορείς να το αλλάξεις... ;) Πως θέλεις να το κάνω? :/ Βασικά, δεν υπάρχει ολοκληρωμένη εκφώνηση βρε οπότε κάποια πράγματα τα βγάζω απο το μυαλό μου :(
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 11 Ιούλ 2011, 14:16

Το πρόβλημα είναι πως δεν μπορείς να ξέρεις από την αρχή πόσες λέξεις θα περιέχει η πρόταση, οπότε μια λύση είναι αυτή που έδωσες (όπου βασικά προβλέπεις ένα μέγιστο πλήθος λέξεων και δουλεύεις με έναν πίνακα από τόσα strings).

Μια άλλη λύση είναι το πρόγραμμά σου να μη στηρίζεται σε τέτοια πρόβλεψη και να μη χρησιμοποιεί καν πίνακα από strings ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

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