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

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

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

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

Δημοσίευσηαπό migf1 » 24 Ιουν 2011, 18:42

Όλες με τη C μοιάζουν, γιατί όλες είναι παράγωγά της :)

Αυτό ακριβώς κάνει! Φίλε clepto, επειδή σε βλέπω πολύ ορεξάτο (και πολύ χαίρομαι :) ) τι θα έλεγες να έπαιρνες ένα βιβλίο (όπως το "Η γλώσσα C σε βάθος" για το οποίο ακούω πάρα πολύ καλά λόγια και υπάρχει και στα Ελληνικά) και να ξεκίναγες σωστά και μεθοδικά την εκμάθηση της γλώσσας;

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

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

Δημοσίευσηαπό clepto » 24 Ιουν 2011, 18:50

πολύ θα ήθελα αλλά λίγο δύσκολο το κόβω...για διάφορους λόγους...
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό clepto » 24 Ιουν 2011, 19:07

δεν μπορώ να καταλάβω την fgets και πως να την χρησιμοποιήσω :oops: :(
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 24 Ιουν 2011, 19:30

boolean είναι η δυαδική τιμή. Είναι αυτό που μπορεί να έχει δύο αποτελέσματα: μια γυναίκα ή είναι έγκυος ή δεν είναι (το αναφέρω ως real-life παράδειγμα). Δεν μπορεί να είναι λίγο έγκυος. Στον κόσμο των υπολογιστών, το αποτέλεσμα ή θα είναι 1 (True) ή 0 (False).

Σε βοηθάνε να ελεγξεις αν για παράδειγμα υπάρχει ένα αρχείο:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <unistd.h> // POSIX / Unix-only

int fileexists(char *fname) {
if (access(fname, F_OK) != -1) {
return 1; // True, file exists
}
else {
return 0; // False, file doesn't exist
}
}

int main()
{
char *fname = "myfile.txt";
int testfile = fileexists(fname);
if (testfile) { printf("Success! Filename %s exists!\n", fname); }
else if (!testfile) { printf("Oops! Filename %s does not exist.\n", fname); }

return 0;
}

Αν το testfile είναι 1 (True), τότε το αρχείο υπάρχει.
Αν το testfile είναι 0 (False), τότε το αρχείο δεν υπάρχει (ή δεν έχουμε τα κατάλληλα δικαιώματα για να το ανοίξουμε).
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 24 Ιουν 2011, 19:40

clepto έγραψε:δεν μπορώ να καταλάβω την fgets και πως να την χρησιμοποιήσω :oops: :(

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

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

Δημοσίευσηαπό clepto » 24 Ιουν 2011, 22:17

μπορείς να μου δώσεις κώδικα με όλη την διαδικασία που περιγράφεις εδώ viewtopic.php?f=6&t=18969&start=180#p194731 ;
αν γίνεται μπορείς να βάλεις και σχόλια;
αν βαριέσαι να το κάνεις κανένα πρόβλημα :)
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 24 Ιουν 2011, 23:20

Να σου δώσω κώδικα που διαβάζει μονοκόμματα μια γραμμή και μετά κρατάει έως τις 10 πρώτες λέξεις, αγνοώντας τις υπόλοιπες...
Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLINE 255+1
#define MAXTOKENS 10

// -----------------------------------------------------------------------------------
char *s_get(char *s, int maxlen)
{
register int i;

for (i=0; (s[i]=getchar()) != '\n' && i < maxlen-1; i++)
; // for-loop with empty body
s[i] = '\0'; // null-terminate s

return s;
}

// -----------------------------------------------------------------------------------
int s_tokenize(char *s, char *tokens[], int maxtokens, char *delimiters)
{
if ( !s || !*s )
return 0;

register int i=0;

tokens[0] = strtok(s, delimiters);
if (tokens[0] == NULL)
return 0;
for (i=1; i < maxtokens && (tokens[i]=strtok(NULL, delimiters)) != NULL; i++)
;

return i;
}

// -----------------------------------------------------------------------------------
int main( void )
{
char linebuf[ MAXLINE ];
char *stokens[ MAXTOKENS ];
int ntokens = 0;
register int i;

printf("Enter up to %d words: ", MAXTOKENS);
s_get( linebuf, MAXLINE);

ntokens = s_tokenize( linebuf, stokens, MAXTOKENS, " \t");

printf("\n%d typed words:\n", ntokens);
for (i=0; i < ntokens; i++)
printf("\t%s\n", stokens[i] );
putchar('\n');


printf("\npress ENTER to exit..."); fflush(stdin); getchar();
exit( EXIT_SUCCESS);
}

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

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

Δημοσίευσηαπό migf1 » 24 Ιουν 2011, 23:25

ntokens είναι το πλήθος των λέξεων που διαβάστηκαν (έως 10), *stokens[MAXTOKENS] είναι ένας πίνακας από 10 strings στα οποίον καταχωρούνται οι λέξεις, linebuf[MAXLINE] είναι το μονοκόμματο string που διαβάζουμε αρχικά, delimiters[] είναι ένα string που περιέχει τους χαρακτήρες που θέλουμε να διαχωρίζουν τις λέξεις (space και tab).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό clepto » 25 Ιουν 2011, 19:41

έκλεψα ( :P ) τον κώδικα σου από το άλλο θέμα αλλά ακόμα δεν ξέρω όπως να εκχωρήσω τους χαρακτήρες σε μεταβλητές και να κάνω τις πράξεις..

ας το θα το κάνω με τον παραδοσιακό τρόπο :P
1 Γνώσεις Linux: Ικανοποιητικό ┃ Προγραμματισμού: Ικανοποιητικό ┃ Αγγλικών: Ικανοποιητικό
2 Ubuntu 13.04 raring 3.8.0-30-generic 64bit (en_US.UTF-8, Unity ubuntu), Ubuntu 3.8.0-19-generic, Windows 7
3 Intel Core i7-3537U CPU @ 2.00GHz ‖ RAM 3840 MiB ‖ ASUS K56CB
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915}
5 wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01) ⋮ eth0: Realtek RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168] (rev 0a)
clepto
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4102
Εγγραφή: 07 Ιαν 2010, 16:27
Τοποθεσία: Πάτρα
Launchpad: christriant
IRC: Clepto
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 26 Ιουν 2011, 18:05

Παιδιά, για μια ακόμη φορά καταφεύγω σε εσάς, πήγα να φτάξω και εγώ ο καημένος ένα πρόγραμματάκι που απλά μαντεύεις ένα νούμερο και ούτε αυτό δε μου βγαίνει χωρίς βοήθεια! :-x :-x
Ωρίστε ο κώδικας:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int guess;
int real;
int yes_no;
real = rand() % 100;

char *game() {
printf("Please type a random number and then hit Enter:\n");
scanf("%d",&guess);
while(guess != real) {
if(guess < real) {
printf("No it is bigger...\n");
}else
{
printf("No it is less...\n");
}

}
}

main() {

do
{
game();
printf("Well done!\nDo you want to play again?(y/n");
} while (scanf("%d",&yes_no) == 'y')
};

και μου βγάζει:
Κώδικας: Επιλογή όλων
main.c:7:1: warning: data definition has no type or storage class
main.c:7:1: error: initializer element is not constant
main.c: In function ‘main’:
main.c:30:1: error: expected ‘;’ before ‘}’ token
main.c:30:1: error: expected declaration or statement at end of input

Ελπίζω πάντως να είναι φυσιολογική αυτή η δυσκολία στην αρχή.... :-x :-x :-x
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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