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

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

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

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

Δημοσίευσηαπό Star_Light » 12 Νοέμ 2011, 14:34

migf1 έγραψε:
Ωραίος :)

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


Τωρα δινω και τα Αγγλικα 10 δεκεβρη ... 1 μικρο κεφαλαιακι μου εμεινε ακομη και στην πτυχιακη 10-15 μερες να μου παρει ακομη... η πτυχιακη εχει τελειωσει σχεδον εχω περασει σελιδες , περιεχομενα εχω βρει τους κωδικες εχω κανει παραρτημα με την χρηση και την εγκατασταση του προγραμματος και μολις τελειωσω θα φτιαξω ενα προγραμμα καθημερινο για την C ενα 2ωρακι! Σε 3-4 χρονια θα ειμαι ατσιδας. :lol: :lol: οι 2 ωρες θα ειναι βρεξει - χιονισει... απλα θελω να βρω και καμια δουλεια πουθενα γιατι εχουν δυσκολεψει τα πραγματα :/

- structured programming ειναι ο διαδικαστικος ?
- Το project με την ναυμαχια πως πηγε?
Γνώσεις ⇛ 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
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 12 Νοέμ 2011, 14:35

migf1 έγραψε:
stamatiou έγραψε:Off topic:
Αυτό το καιρό διαβάζω ένα βιβλίο, το "Hacking - The art of exploitation". Πολύ ωραίο και εξηγεί κάμποσα πράγματα τα οποία δεν πολύ είχα για C (μιλάμε για περίπου 100 σελίδες προγραμματισμό σε C! :D). Κάπου έχει και ένα απλό πρόγραμμα σημειώσεων το οποίο δουλεύει με user id έτσι ώστε κάθε χρήστης να έχει τα δικά του. Αλλά δεν καταλαβαίνω τον αλγόριθμο που ψάχνει να βρει το επόμενο note του user. Επίσης αυτό που κάνει ουσιαστικά είναι να φτιάχνει ένα αρχείο ξεχωριστά για κάθε user;
Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include "hacking.h"

#define FILENAME "/var/notes"

int print_notes(int, int, char *); // note printing function
int find_user_note(int, int); // seek in file for a note for user
int search_note(char *, char *); // search for keyword function
void fatal(char *); // fatal error handler

int main(int argc, char *argv[]) {
int userid, printing=1, fd; // file descriptor
char searchstring[100];

if(argc > 1) // If there is an arg
strcpy(searchstring, argv[1]); // that is the search string
else // otherwise
searchstring[0] = 0; // search string is empty

userid = getuid();
fd = open(FILENAME, O_RDONLY); // open the file for read-only access
if(fd == -1)
fatal("in main() while opening file for reading");

while(printing)
printing = print_notes(fd, userid, searchstring);
printf("-------[ end of note data ]-------\n");
close(fd);
}

// A function to print the notes for a given uid that match
// an optional search string
// returns 0 at end of file, 1 if there are still more notes
int print_notes(int fd, int uid, char *searchstring) {
int note_length;
char byte=0, note_buffer[100];

note_length = find_user_note(fd, uid);
if(note_length == -1) // if end of file reached
return 0; // return 0

read(fd, note_buffer, note_length); // read note data
note_buffer[note_length] = 0; // terminate the string

if(search_note(note_buffer, searchstring)) // if searchstring found
printf(note_buffer); // print the note
return 1;
}

// A function to find the next note for a given userID
// returns -1 if the end of the file is reached
// otherwise it returns the length of the found note
int find_user_note(int fd, int user_uid) {
int note_uid=-1;
unsigned char byte;
int length;

while(note_uid != user_uid) { // loop until a note for user_uid is found
if(read(fd, &note_uid, 4) != 4) // read the uid data
return -1; // if 4 bytes aren't read, return end of file code
if(read(fd, &byte, 1) != 1) // read the newline separator
return -1;

byte = length = 0;
while(byte != '\n') { // figure out how many bytes to the end of line
if(read(fd, &byte, 1) != 1) // read a single byte
return -1; // if byte isn't read, return end of file code
length++;
}
}
lseek(fd, length * -1, SEEK_CUR); // rewind file reading by length bytes

printf("[DEBUG] found a %d byte note for user id %d\n", length, note_uid);
return length;
}

// A function to search a note for a given keyword
// returns 1 if a match is found, 0 if there is no match
int search_note(char *note, char *keyword) {
int i, keyword_length, match=0;

keyword_length = strlen(keyword);
if(keyword_length == 0) // if there is no search string
return 1; // always "match"

for(i=0; i < strlen(note); i++) { // iterate over bytes in note
if(note[i] == keyword[match]) // if byte matches keyword
match++; // get ready to check the next byte
else { // otherwise
if(note[i] == keyword[0]) // if that byte matches first keyword byte
match = 1; // start the match count at 1
else
match = 0; // otherwise it is zero
}
if(match == keyword_length) // if there is a full match
return 1; // return matched
}
return 0; // return not matched
}


Η γνώμη μου είναι πριν περάσεις σε αυτά, να διαβάσεις και να λύσεις όλες τις ασκήσεις του δύστροπου αλλά πολύτιμου "The C Programming Language 2nd Edition" των Kernighan & Richie... αν το καταφέρεις αυτό θα σου είναι πολύ πιο εύκολο να προχωρήσεις σε θέματα όπως τα παραπάνω.


Θελει να γινει χακερας ο σταματιου χαχαχχαα :P
Γνώσεις ⇛ 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
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 12 Νοέμ 2011, 14:37

migf1 έγραψε:
έγραψε:
Η γνώμη μου είναι πριν περάσεις σε αυτά, να διαβάσεις και να λύσεις όλες τις ασκήσεις του δύστροπου αλλά πολύτιμου "The C Programming Language 2nd Edition" των Kernighan & Richie... αν το καταφέρεις αυτό θα σου είναι πολύ πιο εύκολο να προχωρήσεις σε θέματα όπως τα παραπάνω.

Ή αν σου πέφτει βαρύ αυτό, τότε διάβασε το "C Programming: A Modern Approach 2nd Edition" του King (λύσε τις ασκήσεις του και μετά λύσε και τις ασκήσεις του "The C Programming Language 2nd Edition").
Τελευταία επεξεργασία από migf1 και 12 Νοέμ 2011, 15:02, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 12 Νοέμ 2011, 14:46

Star_Light έγραψε:

Τωρα δινω και τα Αγγλικα 10 δεκεβρη ... 1 μικρο κεφαλαιακι μου εμεινε ακομη και στην πτυχιακη 10-15 μερες να μου παρει ακομη... η πτυχιακη εχει τελειωσει σχεδον εχω περασει σελιδες , περιεχομενα εχω βρει τους κωδικες εχω κανει παραρτημα με την χρηση και την εγκατασταση του προγραμματος και μολις τελειωσω θα φτιαξω ενα προγραμμα καθημερινο για την C ενα 2ωρακι! Σε 3-4 χρονια θα ειμαι ατσιδας. :lol: :lol: οι 2 ωρες θα ειναι βρεξει - χιονισει... απλα θελω να βρω και καμια δουλεια πουθενα γιατι εχουν δυσκολεψει τα πραγματα :/

Καλή επιτυχία παντού εύχομαι!

έγραψε:
- structured programming ειναι ο διαδικαστικος ?
- Το project με την ναυμαχια πως πηγε?

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

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

Δημοσίευσηαπό stamatiou » 12 Νοέμ 2011, 15:27

Ευχαριστω migf1 αλλα επειδη ενιωσα και μονος μου αυτην την αναγκη, εχω ξεκινησει ηδη να λυνω τις ασκησεισ του βιβλιου..... :D
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 12 Νοέμ 2011, 16:39

migf1 έγραψε:
Καλή επιτυχία παντού εύχομαι!

- Δομημένος προγραμματισμός (περιλαμβάνει και τον διαδικαστικό)
- Έμεινε εκεί :lol:


Ευχαριστω!!!!! Το GUI δεν το εφτιαξε τελικα το αλλο το παληκαρι???
Βαρεθηκατε ????
Γνώσεις ⇛ 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
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 12 Νοέμ 2011, 17:01

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

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

Δημοσίευσηαπό geovoulga » 15 Νοέμ 2011, 12:51

Το παρακάτω πρόγραμμα με το DEV-C++ κρασάρει, ενώ με το CODE:BLOCKS, όχι.
Μήπως το πρόγραμμα δεν είναι σωστό, ή παίζει κάτι άλλο? Γιατί συμβαίνει αυτό? Αυτό που θέλω να κάνει αρχικά είναι να δέχεται μόνο ένα, συγκεκριμένο, χαρακτήρα από το χρήστη και μέσω της choice να κάνει διάφορες ενέργειες.
Τον παραθέτω.

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

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

#define LENGTH 100+1

int get_menu_choice (void);

int main()
{
char choice = 0, t = 0;

while (1)
{
//Κλήση της συνάρτησης get_menu_choice για την εμφάνιση του main menu
choice = get_menu_choice();

while ((t = getchar()) != '\n');
{
switch (choice)
{
case 'N':
puts("You entered a valid choice.");
break;
case 'S':
puts("You entered a valid choice.");
break;
case 'U':
puts("You entered a valid choice.");
break;
case 'E':
return 0;
default:
puts("INVALID ENTRY\n");
}
}
}
}

// Δήλωση της συνάρτησης για την εμφάνιση του main menu
int get_menu_choice (void)
{
char selection[] = {'0'};
char line[] = {'0'};
int count = 0;

do
{
puts ("\nMAIN MENU\n");
puts ("\n[N] Start New Game\n");
puts ("\n[S] Score\n");
puts ("\n[U] Undo\n");
puts ("\n[E] End Program\n");
printf ("\nSelection [N, S, U, E]:");

fgets( selection, LENGTH, stdin );
sscanf( selection, "%s", line );

count = strlen (line);

if( count != 1 )
puts("\nInvalid entry,you can enter only N,S,U,E.\n");
}
while( count > 1 );

system("pause");

return line[0];
}
geovoulga
babeTUX
babeTUX
 
Δημοσιεύσεις: 3
Εγγραφή: 15 Νοέμ 2011, 12:31
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 15 Νοέμ 2011, 23:37

geovoulga έγραψε:Το παρακάτω πρόγραμμα με το DEV-C++ κρασάρει, ενώ με το CODE:BLOCKS, όχι.
Μήπως το πρόγραμμα δεν είναι σωστό, ή παίζει κάτι άλλο? Γιατί συμβαίνει αυτό? Αυτό που θέλω να κάνει αρχικά είναι να δέχεται μόνο ένα, συγκεκριμένο, χαρακτήρα από το χρήστη και μέσω της choice να κάνει διάφορες ενέργειες.
Τον παραθέτω.

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

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

#define LENGTH 100+1

int get_menu_choice (void);

int main()
{
char choice = 0, t = 0;

while (1)
{
//Κλήση της συνάρτησης get_menu_choice για την εμφάνιση του main menu
choice = get_menu_choice();

while ((t = getchar()) != '\n');
{
switch (choice)
{
case 'N':
puts("You entered a valid choice.");
break;
case 'S':
puts("You entered a valid choice.");
break;
case 'U':
puts("You entered a valid choice.");
break;
case 'E':
return 0;
default:
puts("INVALID ENTRY\n");
}
}
}
}

// Δήλωση της συνάρτησης για την εμφάνιση του main menu
int get_menu_choice (void)
{
char selection[] = {'0'};
char line[] = {'0'};
int count = 0;

do
{
puts ("\nMAIN MENU\n");
puts ("\n[N] Start New Game\n");
puts ("\n[S] Score\n");
puts ("\n[U] Undo\n");
puts ("\n[E] End Program\n");
printf ("\nSelection [N, S, U, E]:");

fgets( selection, LENGTH, stdin );
sscanf( selection, "%s", line );

count = strlen (line);

if( count != 1 )
puts("\nInvalid entry,you can enter only N,S,U,E.\n");
}
while( count > 1 );

system("pause");

return line[0];
}

Εγώ το κοίταξα μια γρήγορη αλλά δεν βρήκα τίποτα :/ Στο Code : Blocks δουλεύει κανονικά ή κρασάρει ενώ τρέχει;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 17 Νοέμ 2011, 14:40

Έχω σπασει το κεφάλι μου! Είναι μια άσκηση που πρέπει να εκτυπώνω μια λέξη ανά σειρά, αλλά για κάποιο λόγο δεν λειτουργεί!
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(void) {
int c;
while((c = getchar()) != EOF) {
if(c == ' ' || '\t' || '\n') {
putchar('\n');
}else {
putchar(c);
}
}
return 0;
}
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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