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

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

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

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

Δημοσίευσηαπό Star_Light » 02 Μαρ 2012, 15:52

Programming project 4 σελιδα 50 chapter 3

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include<stdio.h>

int main(void)
{
int num1 , num2 , num3;

printf(" Enter phone number [(xxx) xxx-xxxx] : ");
scanf("(%d)%d-%d" ,&num1 , &num2 , &num3);

printf(" You entered: %d.%d.%d ", num1 , num2 , num3);

return 0;
}
Τελευταία επεξεργασία από Star_Light και 02 Μαρ 2012, 21:08, έχει επεξεργασθεί 1 φορά/ες συνολικά
Γνώσεις ⇛ 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

Δημοσίευσηαπό Ilias95 » 02 Μαρ 2012, 15:52

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

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

Δημοσίευσηαπό Star_Light » 02 Μαρ 2012, 16:36

Να ρωτησω κατι αλλο εγω?

Με αφορμη αυτο εδω -> http://www.geeksforgeeks.org/archives/14268

Φανταζομαι η C ειναι ανεξαρτητη απο αυτο μιας και τα heap και stack ειναι platform/architecture dependent έννοιες.

Η εικονικη μνημη δηλαδη υλοποιειται σαν στοίβα εσωτερικα απο το εκαστοτε λειτουργικο συστημα? Ασχετα της C.
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 16:39

Ilias95 έγραψε:Έδωσα κακό παράδειγμα.
Όχι δεν θέλω να είναι συνεχόμενοι οι αριθμοί ή ακόμα και να μην είναι αποκλειστικά αριθμοί.

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

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

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 16:44

Star_Light έγραψε:Να ρωτησω κατι αλλο εγω?

Με αφορμη αυτο εδω -> http://www.geeksforgeeks.org/archives/14268

Φανταζομαι η C ειναι ανεξαρτητη απο αυτο μιας και τα heap και stack ειναι platform/architecture dependent έννοιες.

Η εικονικη μνημη δηλαδη υλοποιειται σαν στοίβα εσωτερικα απο το εκαστοτε λειτουργικο συστημα? Ασχετα της C.

Αυτό είναι μια τυπική αναπαράσταση ενός C προγράμματος σε Linux. Σε άλλες πλατφόρμες ενδεχομένως να διαφέρει σε λεπτομέρειες, αλλά ο βασικός σκελετός παραμένει λίγο-πολύ ίδιος. Δες για παράδειγμα πως είναι σε Windows: http://www.installsetupconfig.com/win32 ... pis12.html

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

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

Δημοσίευσηαπό Star_Light » 02 Μαρ 2012, 16:50

migf1 έγραψε:
Αυτό είναι μια τυπική αναπαράσταση ενός C προγράμματος σε Linux. Σε άλλες πλατφόρμες ενδεχομένως να διαφέρει σε λεπτομέρειες, αλλά ο βασικός σκελετός παραμένει λίγο-πολύ ίδιος. Δες για παράδειγμα πως είναι σε Windows: http://www.installsetupconfig.com/win32 ... pis12.html

Επίσης, ναι η εικονική μνήμη υλοποιείται διαφορετικά σε κάθε πλατφόρμα, αλλά όλες οι υλοποιήσεις βασίζονται λίγο-πολύ πάνω στην ίδια θεωρία ή/και τεχνικές.


Nαι σωστα παραμενει ο ιδιος γιατι οπως πηρε καπου το ματι μου δουλευει αψογα και αρα δεν χρειαζεται αναθεωρησεις :p
απλα ηθελα να ξεκαθαρισω οτι δεν ειναι θεμα της C αυτο το πραγμα... γιατι θα μπω παλι σε κανα τσατ και θα αρχισουν οι ξενοι
τα "There is no heap or stack in C" και θα μου σπασουν τα νευρα και θα τους πεταξω κανα "ελληνικο" :lol: :lol:
Γνώσεις ⇛ 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

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 19:46

Για τις ασκήσεις που παραθέτετε πρέπει να βρίσκω για ποια πράγματα έχει μιλήσει ή δεν έχει μιλήσει μέχρι εκείνο το σημείο το βιβλίο, προκειμένου να εκφέρω άποψη... και μου είναι λιγάκι δύσκολο :)

Βάζετε αν θέλετε και δυο λόγια για το τι έχει καλύψει μέχρι την άσκηση το βιβλίο. Για παράδειγμα, την άσκηση 12 που λέει ο Ηλίας, εγώ θα την έλυνα κάπως έτσι...

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>		/* for printf(), fgets(), stdin */
#include <stdlib.h> /* for atof(), exit(), EXIT_SUCCESS */
#include <string.h> /* for strchr() */

#define MAXINPUT (1024+1)

/* ------------------------------------------------------
*
* ------------------------------------------------------
*/
float calc( const char oper, const float op1, const float op2 )
{
float ret = 0.0;

if ( oper == '+' )
ret = op1 + op2;
else if ( oper == '-' )
ret = op1 - op2;
else if ( oper == '*' )
ret = op1 * op2;
else if ( oper == '/' )
ret = op1 / op2;

return ret;

}

/* ------------------------------------------------------
*
* ------------------------------------------------------
*/
int main( void )
{
char expr[ MAXINPUT ] = {'\0'};
char *cp1 = NULL, *cp2 = NULL;
float res;

puts("Enter an arithemtic expression of floats...");
fgets(expr, MAXINPUT, stdin);

cp1 = cp2 = expr;
do
{
/* cp2 is at an operator */
if ( strchr("+-*/", *cp2 ) )
{
/* only the first time */
if ( cp1 == expr ) {
res = atof( cp1 ); /* from cp1 to operator*/
cp1 = cp2 + 1; /* mv cp1 past operator*/
continue;
}
/* all other times */
cp1 = cp2 + 1; /* mv cp1 past operator*/
res = calc( *cp2, res, atof(cp1) ); /* calc new result */
cp2++; /* mv cp2 one pos right */
}
/* cp2 is NOT at an operator */
else
cp2++;

} while ( *cp2 != '\n' );

printf("= %.2f\n", res );

exit( EXIT_SUCCESS );
}


Βασικά διαβάζω το expression μονοκόμματα μέσα στο string expr το οποίο σκανάρω με τους δείκτες cp1 και cp2... ο cp1 "θυμάται" σε ποια θέση του expr ξεκινάει ο όρος που προηγείται ενός συμβόλου πράξης, ενώ ο cp2 "τρέχει" μέχρι να βρει σύμβολο πράξης. Η συνάρτηση atof() μετατρέπει σε float ένα string (διαβάστε την τεκμηρίωσή της για την ακριβή της συμπεριφορά). Η strchr() αναζητάει έναν χαρακτήρα μέσα σε ένα string (επίσης κοιτάξτε την τεκμηρίωσή της).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 20:13

Ilias95 έγραψε:
...
Η 12 δουλεύει μόνο όταν δεν υπάρχουν κενά ανάμεσα στους τελεστές και τους τελεστέους όπως στο παράδειγμα.
Οποιεσδήποτε υποδείξεις ευπρόσδεκτες.

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

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

Δημοσίευσηαπό Ilias95 » 02 Μαρ 2012, 20:21

migf1 έγραψε:
Ilias95 έγραψε:
...
Η 12 δουλεύει μόνο όταν δεν υπάρχουν κενά ανάμεσα στους τελεστές και τους τελεστέους όπως στο παράδειγμα.
Οποιεσδήποτε υποδείξεις ευπρόσδεκτες.

Έχει να κάνει με το ότι η scanf() σταματάει να διαβάζει όταν βρει κενό διάστημα. Ενδεχομένως να υπάρχει κάποιος τρόπος από τα... μυριάδες χαρακτηριστικά της συνάρτησης :lol: (π.χ. ίσως με χρήση των [ ] και του ^ που της λένε τι είδους χαρακτήρες να αγνοήσει) αλλά όπως έχω γράψει και σε παλαιότερο ποστ, εγώ δεν τη χρησιμοποιώ την scanf() ... βασικά κανείς δεν τη χρησιμοποιεί... είναι καλή όταν η είσοδος είναι φορμαρισμένη ομοιογενώς, αλλά στις υπόλοιπες περιπτώσεις (που είναι και η πλειοψηφία) είναι μπλέξιμο μεγάλο.

Στην συγκεκριμένη περίπτωση την χρησιμοποιώ επειδή η mySCANF() όπως είπαμε δεν δουλεύει μέσα σε loop. Στην πορεία θα δω και άλλους τρόπους για να πάρω είσοδο.
Την λύση σου θα την δω όταν μάθω και για arrays/pointers.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 20:21

Α παρεμπιπτόντως, και η δική μου λύση για την άσκηση 12 έχει προβλήματα... π.χ. αν η έκφραση ξεκινάει ή τελειώνει με μη-ψηφίο (π.χ. με τελεστή... τα κενά δεν την πειράζουν).

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

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

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