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

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

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

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

Δημοσίευσηαπό Ilias95 » 07 Απρ 2012, 18:00

migf1 έγραψε:Ναι, αυτό το [48]= δεν θυμόμουν (σε 2D array πως λειτουργεί; ).

Κώδικας: Επιλογή όλων
int table[5][5] = { {3, 4}, [2][1] = 12, 27, [4][0] = 14 };
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 18:19

Μάλιστα, όχι απλά δεν το θυμόμουν, δεν το ήξερα καν! ;)

Μόλις δοκίμασα όμως με 2D και τελικά δεν χρειάζεται το παραπάνω....

Μορφοποιημένος Κώδικας: Επιλογή όλων
enum Piece { EMPTY=0, P, N, B, R, Q, K };	/* pawn, knight, bishop, rook, queen, king*/
enum Color { BL=0, WH };

typedef struct Square {
enum Piece piece;
enum Color color;
} Square;

int main( void )
{
Square board[8][8] = {
{ {R,BL}, {N,BL}, {B,BL}, {K,BL}, {Q,BL}, {B,BL}, {N,BL}, {R,BL} },
{ {P,BL}, {P,BL}, {P,BL}, {P,BL}, {P,BL}, {P,BL}, {P,BL}, {P,BL} },
{ {EMPTY,BL} },
{ {EMPTY,BL} },
{ {EMPTY,BL} },
{ {EMPTY,BL} },
{ {P,WH}, {P,WH}, {P,WH}, {P,WH}, {P,WH}, {P,WH}, {P,WH}, {P,WH} },
{ {R,WH}, {N,WH}, {B,WH}, {K,WH}, {Q,WH}, {B,WH}, {N,WH}, {R,WH} }
};
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 18:46

Έκανα μια εναλλακτική υλοποίηση, με 3ο πεδίο στο struct για τον χαρακτήρα εκτύπωσης του κάθε τετραγώνου...

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

enum Piece {EMPTY=0, P, N, B, R, Q, K}; /* pawn, knight, bishop, rook, queen, king*/
enum Color { BL=0, WH };

typedef struct Square {
enum Piece piece;
enum Color color;
char cout;
} Square;

/* ------------------------------------------------------
*
* ------------------------------------------------------
*/
void board_print( Square board[][8] )
{
if ( !board ) {
puts("*** internal error: invalid parameter...");
return;
}

for (int i=0; i < 8; i++)
{
for (int j=0; j < 8; j++ ) {
char c = board[i][j].cout;
if ( '\0' == c )
printf( ". " );
else
printf( "%c ", c );
}
puts("\b");
}

return;
}

/* ------------------------------------------------------
*
* ------------------------------------------------------
*/
int main( void )
{
Square board[8][8] = {
{ /* black back-row*/
{R,BL,'R'}, {N,BL,'K'}, {B,BL,'B'}, {K,BL,'K'},
{Q,BL,'Q'}, {B,BL,'B'}, {N,BL,'N'}, {R,BL,'R'}
},
{ /* black fornt-row */
{P,BL,'P'}, {P,BL,'P'}, {P,BL,'P'}, {P,BL,'P'},
{P,BL,'P'}, {P,BL,'P'}, {P,BL,'P'}, {P,BL,'P'}
},

{ {EMPTY,BL,'\0'} },
{ {EMPTY,BL,'\0'} },
{ {EMPTY,BL,'\0'} },
{ {EMPTY,BL,'\0'} },

{ /* white front-row */
{P,WH,'p'}, {P,WH,'p'}, {P,WH,'p'}, {P,WH,'p'},
{P,WH,'p'}, {P,WH,'p'}, {P,WH,'p'}, {P,WH,'p'}
},
{ /* white back-row */
{R,WH,'r'}, {N,WH,'n'}, {B,WH,'b'}, {K,WH,'k'},
{Q,WH,'q'}, {B,WH,'b'}, {N,WH,'n'}, {R,WH,'r'}
}
};

board_print( board );

system("pause"); /* windows only */
exit( EXIT_SUCCESS );
}

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

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

Δημοσίευσηαπό alkismavridis » 07 Απρ 2012, 18:56

Καλησπέρα!
Έχω την εξής απορία: τι γίνεται με τα σφάλματα (exceptions) στη c;

Πρέπει κάθε φορά να βάζω if blocks για κάθε διαίρεση, άνοιγμα αρχείου κτλ κτλ ή υπάρχει τρόπος να "συνεχίσω" το πρόγραμμα από κάπου όταν συμβεί κάτι περίεργο;;

Ψάχνοντας στο google βρίκα για τις συναρτήσεις setjmp κτλ, αλλά και πάλι τα if blocks δε τα γλιτώνεις..
Ευχαριστώ!
Γνώσεις ⇛ Linux: Μέτριο┃ Προγραμματισμός: Java, Assembly, Fortran, μαθαίνω C/X11┃ Αγγλικά: Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 14.04 64-bit ┃ Τρόπος εγκατάστασης: Live USB
Προδιαγραφές ⇛ Desktop: Intel i5 2320 3.00GHz.┃ MotherBoard: Asus p8h61 -m pro
Προδιαγραφές ⇛ RAM: 4GB ┃ Τροφοδοτικό Corsair CX430

GPU: Intel 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0102] {i915}
5 eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) ⋮ wlan0: 0b05:1723 ASUS WL-167G v2 802.11g Adapter [Ralink RT2571W]
Οθόνη Schaub Lorenz (Tv)
alkismavridis
punkTUX
punkTUX
 
Δημοσιεύσεις: 273
Εγγραφή: 18 Μαρ 2009, 18:46
Εκτύπωση

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

Δημοσίευσηαπό simosx » 07 Απρ 2012, 19:11

stamatiou έγραψε:Πήγα να κάνω μια υλοποίηση με έναν άλλο αλγόριθμο αλλά για κάποιο λόγο δεν μου εμφανίζει ούτε την έξοδο :/
Κώδικας: Επιλογή όλων

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

#define MAX_VALUE 2000000001L

int main(void) {
register long int counter, main_num, num_to_add,num_to_stop, i1, i2;
long int *array, smallest[3], size;
FILE *input, *output;

if(!(input = fopen("operators.in","r"))) {
printf("Failed to open operators.in\n");
exit(EXIT_FAILURE);
}
if(!(output = fopen("operators.out","w"))) {
printf("Failed to open operators.out\n");
exit(EXIT_FAILURE);
}

smallest[0] = MAX_VALUE;

fscanf(input,"%ld",&size);

if(!(array = (long int *) malloc(size * sizeof(long int)))) {
printf("Failed to allocate memory for input\n");
exit(EXIT_FAILURE);
}

array[0] = 0;
counter = 1;
fscanf(input, "%ld", &array[0]);
printf("Inputting:\t%ld\n",array[0]);

do {
fscanf(input, "%ld", &array[counter]);
printf("Inputing:\t%ld\n",array[counter]);
printf("Inputing:\t%ld\n",array[counter + 1]);
i1 = labs(array[0] + array[counter]);
i2 = labs(array[0] + array[counter + 1]);
counter += 2;
}while(counter - 2 < size && i1 > i2);


array = (long int *) realloc((long int *) array, ((size = counter) * sizeof(long int)));

for(main_num = 0; main_num < size; main_num++) {
for(num_to_add = main_num + 1; num_to_add < size && num_to_add <= num_to_stop; num_to_add++) {
printf("Processing:\t%ld %ld\n",array[counter],array[counter + 1]);
if((labs((array[main_num] + array[num_to_add]))) < (labs(array[main_num] + array[num_to_add + 1]))) {
smallest[0] = labs(array[main_num] + array[num_to_add]);
smallest[1] = array[main_num];
smallest[2] = array[num_to_add];
num_to_stop = num_to_add;
}
}
}

fprintf(output,"/---------------\nMinsum:\t%ld %ld",smallest[1],smallest[2]);

free(array);

exit(EXIT_SUCCESS);
}


Προτείνω για το δικό σου θέμα, μιας και μαθαίνεις προγραμματισμό, να ξεκινήσεις ένα νέο νήμα για συζήτηση με το πρόγραμμα που φτιάχνεις.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 07 Απρ 2012, 20:04

alkismavridis έγραψε:Καλησπέρα!
Έχω την εξής απορία: τι γίνεται με τα σφάλματα (exceptions) στη c;

Πρέπει κάθε φορά να βάζω if blocks για κάθε διαίρεση, άνοιγμα αρχείου κτλ κτλ ή υπάρχει τρόπος να "συνεχίσω" το πρόγραμμα από κάπου όταν συμβεί κάτι περίεργο;;

Ψάχνοντας στο google βρίκα για τις συναρτήσεις setjmp κτλ, αλλά και πάλι τα if blocks δε τα γλιτώνεις..
Ευχαριστώ!

Καλησπέρα,

οι συναρτήσεις που βρήκες (δηλαδή η setjmp() και longjmp() ) είναι ότι πλησιέστερο έχει η C για το exception-handling που γνωρίζεις από μεταγενέστερες γλώσσες.

Το κακό είναι πως δεν παρέχεται έτοιμος, ολοκληρωμένος μηχανισμός διαχείρισης exceptions. Το καλό είναι πως χρησιμοποιώντας αυτές τις 2 συναρτήσεις μπορείς να φτιάξεις ότι μηχανισμό θεωρείς καλύτερο (ή να χρησιμοποιήσεις κάποιον από τους μη-στάνταρ έτοιμους, που έχουν φτιάξει άλλοι).

Για ξεκίνημα έχω να σου προτείνω 3 links:

http://www.di.unipi.it/~nids/docs/longj ... catch.html
http://www.on-time.com/ddj0011.htm
http://lyngvig.org/a-proposal-for-excep ... -in-c.ashx

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

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

Δημοσίευσηαπό alkismavridis » 08 Απρ 2012, 01:09

Φίλε Simosx, δε κάνω κάποιο συγκεκριμένο πρόγραμμα τώρα, απλώς μαθαίνοντας μία νέα γλώσσα προσπαθώ να δω τι εργαλεία έχω "στα χέρια μου".

Απ ότι κατάλαβα από αυτά τα site, μπορείς να δημιουργήσεις ψευδο-δομές try, αλλά αν (ο μη γένοιτω) γίνει η στραβή και ξεχάσεις ένα if, και γίνει μία διαίρεση με μηδέν (πχ), το πρόγραμμα απλώς θα τερματίσει. Δε μπορεί να "συνεχίσει απο κάπου". Σωστά;
Αυτή είναι βασικά η ερώτησή μου!
Γνώσεις ⇛ Linux: Μέτριο┃ Προγραμματισμός: Java, Assembly, Fortran, μαθαίνω C/X11┃ Αγγλικά: Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 14.04 64-bit ┃ Τρόπος εγκατάστασης: Live USB
Προδιαγραφές ⇛ Desktop: Intel i5 2320 3.00GHz.┃ MotherBoard: Asus p8h61 -m pro
Προδιαγραφές ⇛ RAM: 4GB ┃ Τροφοδοτικό Corsair CX430

GPU: Intel 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0102] {i915}
5 eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) ⋮ wlan0: 0b05:1723 ASUS WL-167G v2 802.11g Adapter [Ralink RT2571W]
Οθόνη Schaub Lorenz (Tv)
alkismavridis
punkTUX
punkTUX
 
Δημοσιεύσεις: 273
Εγγραφή: 18 Μαρ 2009, 18:46
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 08 Απρ 2012, 01:39

Εμένα πρέπει να εννοείς φίλε Άλκη :)

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

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

Δημοσίευσηαπό migf1 » 08 Απρ 2012, 01:57

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

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

Δημοσίευσηαπό alkismavridis » 08 Απρ 2012, 02:20

Ναι έχεις δίκιο.. Ίσως έχω συνηθίσει από τη java.. Οπότε πρέπει να είμαστε διαρκώς σε.. Επιφυλακή! :-)
Γνώσεις ⇛ Linux: Μέτριο┃ Προγραμματισμός: Java, Assembly, Fortran, μαθαίνω C/X11┃ Αγγλικά: Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 14.04 64-bit ┃ Τρόπος εγκατάστασης: Live USB
Προδιαγραφές ⇛ Desktop: Intel i5 2320 3.00GHz.┃ MotherBoard: Asus p8h61 -m pro
Προδιαγραφές ⇛ RAM: 4GB ┃ Τροφοδοτικό Corsair CX430

GPU: Intel 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0102] {i915}
5 eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) ⋮ wlan0: 0b05:1723 ASUS WL-167G v2 802.11g Adapter [Ralink RT2571W]
Οθόνη Schaub Lorenz (Tv)
alkismavridis
punkTUX
punkTUX
 
Δημοσιεύσεις: 273
Εγγραφή: 18 Μαρ 2009, 18:46
Εκτύπωση

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

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

cron