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

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

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

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

Δημοσίευσηαπό migf1 » 02 Σεπ 2011, 03:59

Να στο πω αλλιώς, όταν (*s)= 0; // το = είναι ανάθεση εδώ, το !(*s) τί είναι, TRUE ή FALSE;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό Star_Light » 02 Σεπ 2011, 04:01

migf1 έγραψε:Να στο πω αλλιώς, όταν (*s)= 0; // το = είναι ανάθεση εδώ, το !(*s) τί είναι, TRUE ή FALSE;


τοτε το !(*s) δινει 1. Αρα ειναι TRUE (μη μηδενικη τιμη).

αλλα πως θα συσχετιστει αυτο με τον αλγοριθμο μας δεν ξερω....
Γνώσεις ⇛ 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 » 02 Σεπ 2011, 04:05

Σωστός! Οπότε όταν το *s1 γίνει 0 (όταν δηλαδή ο δείκτης s1 φτάσει στο τέλος του 1ου string, δλδ στον μηδενικό χαρακτήρα) η συνθήκη του if θα γίνει TRUE και άρα θα μπει η ροή στο κυρίως σώμα του if ;)

Μην παιδεύεσαι πάντως για το συγκεκριμένο, γράψτο...
Κώδικας: Επιλογή όλων

if ( *s1++ == '\0' )

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

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

Δημοσίευσηαπό Star_Light » 02 Σεπ 2011, 04:09

migf1 έγραψε:Σωστός! Οπότε όταν το *s1 γίνει 0 (όταν δηλαδή ο δείκτης s1 φτάσει στο τέλος του 1ου string) η συνθήκη του if θα γίνει TRUE και άρα θα μπει η ροή στο κυρίως σώμα της ;)

Μην παιδεύεσαι πάντως για το συγκεκριμένο, γράψτο...
Κώδικας: Επιλογή όλων

if ( *s1++ == '\0' )

το ίδιο πράγμα είναι, και το ζητούμενο είναι να το καταλαβαίνεις εσύ με την 1η ματιά όταν το ξαναδιαβάσεις μελλοντικά ;)


κοιταξε με ενδιαφερει να φτιασω και στο επιπεδο να καταλαβαινω τα πολυπλοκα αλλωστε για αυτο ασχολουμαι με την C . Αλλα προς το παρον θα το κρατησω σαν
την δευτερη εκδοχη της if που δινεις... εαν δηλαδη ο δεικτης φτασει στο τελος του string επεστρεψε 0. Μελλοντικα θα τα καταλαβαινω... αν εχω φτασει και σε ενα Α σημειο να εξασκησω το μυαλο μου περισσοτερο. Λοιπον καληνυχτιζω φιλτατε migf καλο ξημερωμα τα λεμε αυριο αν δεν εχεις τις δουλειες σου.
Γνώσεις ⇛ 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 » 02 Σεπ 2011, 04:13

Ναι, το βασικό είναι ο κώδικάς που γράφεις να είναι τόσο συνεπτυγμένος όσο να τον καταλαβαίνεις εσύ με την 1η ματιά (και όχι περισσότερο). Όσο εξοικειώνεσαι (γράφοντας κώδικα, πολύ κώδικα :) ) τόσο πιο συνεπτυγμένη σύνταξη θα μπορείς να αναγνωρίζεις με την 1η ματιά :)

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

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

Δημοσίευσηαπό migf1 » 02 Σεπ 2011, 12:58

Καλημέρα,

τελικά καταφέρατε να μετατρέψετε τον κώδικα με μετρητές και να δουλεύει σωστά σε όλα τα test-cases, για να πάμε παρακάτω;

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

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

Δημοσίευσηαπό Star_Light » 02 Σεπ 2011, 13:01

migf1 έγραψε:Καλημέρα,

τελικά καταφέρατε να μετατρέψετε τον κώδικα με μετρητές και να δουλεύει σωστά σε όλα τα test-cases, για να πάμε παρακάτω;

Hint: μονάχα ένας μετρητής χρειάζεται και για τα 2 strings.


Kαλημέρα. Βασικα έχω μια μικρη παρένθεση σε έναν κώδικα ο οποίος υπολογίζει δυνάμεις.... να τον παραθέσω ή θα ξεφύγουμε??? 2-3 ερωτησεις συγκεκριμενες εχω...
Γνώσεις ⇛ 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 » 02 Σεπ 2011, 13:08

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

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

Δημοσίευσηαπό Star_Light » 02 Σεπ 2011, 13:17

migf1 έγραψε:Θα ξεφύγουμε, αλλά παρέθεσέ τον :lol:


Οκ :D

Spoiler: show
Κώδικας: Επιλογή όλων
#include <stdio.h>
int raiseToPower(int b, int n);

int main()
{

int b, n;
int z,i;

printf("\nPoses fores thelete na ektelestei to programma?\n");
scanf("%d",&z);

for(i=0; i<z; i++)
{
printf("Give the base: ");
scanf("%d",&b);
printf("Give the exponent: ");
scanf("%d",&n);
if(n<0)
{
printf("\n Invalid value \n");
continue;
}
printf("The result is : %d^%d = %d\n", b, n, raiseToPower(b, n));
}


return 0;
}


int raiseToPower(int b, int n )
{

if(n==0)
return 1;
else
return( b * raiseToPower(b, n-1) );
}


Λοιπον εδω κανω ελεγχο για μη αρνητικη τιμη (εκει που ειναι η if στην main)
πως θα μπορουσα εγω να υπολογιζω και αυτη την αρνητική τιμη? πχ 2^-1 = 1/2^1 = 1/2
πηγα να βαλω ενα "case" μεσα στην συναρτηση αλλα φυσικα δεν μου δουλεψε ενα τετοιο
=>
Κώδικας: Επιλογή όλων
if(n<0) return ( 1/ b * raiseToPower(b, n-1) );


μου εδινε segmentation fault βεβαια οχι αδικα μιας και η επιστρεφομενη τιμη ειναι double με αυτο που κανω ενω το προτυπο της συναρτησης την οριζει σε int.
Γνώσεις ⇛ 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++

Δημοσίευσηαπό stamatiou » 02 Σεπ 2011, 13:37

Να και ο κώδικας της s_compare, μου φαίνεται πως δουλεύει:
Spoiler: show
Κώδικας: Επιλογή όλων
int s_compare( const char *s1, const char *s2 )
{
int i1 = 0;
while ( s1[i1] == s2[i1] )
if ( !s1[i1++] )
return 0;

return (int)(s1[i1] - s2[i1]);
}
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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