Παραδείγματα & Ασκήσεις στην C

...ασύγχρονα μαθήματα γλώσσας C

Παραδείγματα & Ασκήσεις στην C

Δημοσίευσηαπό linuxs » 03 Ιούλ 2011, 21:00

Παραδείγματα Aσκήσεων στην C


Στη δημοσίευση αυτή, μπορεί ο κάθε ένας να προσθέσει το πρόγραμμά του είτε είναι απλό είτε σύνθετο. Τα προγράμματα θα πρέπει να είναι γραμμένα στην C και καλό είναι να τρέχουν με είσοδο το Ν και όχι κάποιον συγκεκριμένο αριθμό! Με άλλα λόγια να γράφετε το πρόγραμμά σας όσο γίνεται πιο γενικό. Έχω δημιουργήσει έναν πίνακα περιεχομένων όπου θα μπορείτε πιο εύκολα πιστεύω να μεταφερθείτε στο πρόγραμμα που θέλετε.


Πίνακας περιεχομένων


Απλά παραδείγματα

Εντολές συνθήκης if else

Αναδρομή
Εντολές επανάληψης(loops)

Δείκτες(pointers)

Πίνακες(arrays)

Συμβολοσειρές(strings)

Αρχεία(files)

Γραφικά

Επιπλέον


Παραδείγματα & Ασκήσεις




Εκτυπώνει ένα απλό μήνυμα στην οθόνη
απο: linuxs
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(){
           printf("Hello world\n");
return 0;
}

Contents


Διάβασμα ενός ακεραίου απο το πληκτρολόγιο
απο: linuxs
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(){
           int a;
               printf("Please type an integer to read:");
               scanf("%d", &a);
               
               printf("You have just typed: %d\n", a);
return 0;
}

Contents


Εύρεση αν η είσοδος(integer) ξεπερνά η όχι το 10
απο: linuxs
Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(){
           int a;
               printf("Please type an integer to read:");
               scanf("%d", &a);
               if(a>10) {
                        printf("Student passed!\n");
               }else{
                        printf("Student must repeat the class!\n");
               }

return 0;
}

Contents


Υπολογίζει και τέλος εκτυπώνει το άθροισμα των ακεραίων απο 1 έως Ν
απο: linuxs
Κώδικας: Επιλογή όλων
/**************************************************************
Υπολογίζει και εκτυπώνει το άθροισμα απο 1 έως N
*************************************************************/
#include <stdio.h>
#define N 1000

int main(void) {
    int i, sum=0;
        for(i=1; i<=N; i++){
                 sum+=i;
        }
                 printf("The sum from 1 to %d = %d\n", N, sum);       
return 0;
}

Contents


Υπολογίζει το άθροισμα των περιττών αριθμών απο 1 έως ΜΑΧ
απο: migf1
Κώδικας: Επιλογή όλων
/* -------------------------------------------------------------
* Υπολογίζει και τυπώνει το άθροισμα των περιττών αριθμών από
* το 1 έως MAX (συμπεριλαμβανομένων)
* Για την εύρεση του αν ένας αριθμός είναι περιττός, εξετάζει αν
* το υπόλοιπο της διαίρεσής του με το 2 είναι διάφορο του μηδενός
* (όταν το υπόλοιπο της διαίρεσης είναι 0, τότε ο αριθμός είναι άρτιος)
* -------------------------------------------------------------
*/

#include <stdio.h>
#define MAX   1000      // αλλάξτε το σε όποιον θετικό ακέραιο θέλετε

int main ( void )
{
   long oddsum = 0;
   register int i;

   for (i=1; i < MAX+1; i++)
      if ( i%2 != 0 )
         oddsum += i;

   printf("Sum of odd numbers from 1 to %d = %ld\n",  MAX, oddsum);

   return 0;
}

Contents


Υπολογίζει το άθροισμα των άρτιων αριθμών απο 1 έως ΜΑΧ
απο: migf1
Κώδικας: Επιλογή όλων
/*****************************************************************************************************
Υπολογίζει και τυπώνει το άθροισμα των άρτιων αριθμών από
το 1 έως MAX (συμπεριλαμβανομένων)
Για την εύρεση του αν ένας αριθμός είναι άρτιος, εξετάζει αν
το υπόλοιπο της διαίρεσής του με το 2 είναι ίσο με το μηδεν
(όταν το υπόλοιπο της διαίρεσης διαφορετικό απο το 0, τότε ο αριθμός είναι περιττός)
*****************************************************************************************************/

#include <stdio.h>
#define MAX   1000

int main ( void )
{
   long evensum = 0;
   register int i;

   for (i=1; i < MAX+1; i++)
      if ( i%2 == 0 )
         evensum += i;

   printf("Sum of even numbers from 1 to %d = %ld\n",  MAX, evensum);

   return 0;
}

Contents


Υπολογισμός αθροίσματος και μέσου όρου ή μεγίστου 3 αριθμών
απο: clepto
Κώδικας: Επιλογή όλων
/******************************************************************************************
Το πρόγραμμα θα παίρνει ως είσοδο 3 ακέραιους αριθμούς και θα υπολογίζει
το άθροισμα τους, αν το άθροισμα είναι μεγαλύτερο του μηδέν να βρίσκει
τον μέσο όρο ενώ σε διαφορετική περίπτωση να δίνει τον μεγαλύτερο.
******************************************************************************************/
    #include <stdio.h>

    main(void) {

       int x, y, a, xya, moxya;

       printf("ΔΩΣΕ 3 ΑΡΙΘΜΟΥΣ");
       scanf("%d %d %d", &x, &y, &a);
       
       xya = x+y+a;
       printf("ΤΟ ΑΘΡΟΙΣΜΑ ΤΟΥΣ ΕΙΝΑΙ %d /n", xya);
       
       if (xya>0) {
          moxya = xya/3;
          printf("Ο ΜΕΣΟΣ ΟΡΟΣ ΕΙΝΑΙ %d", moxya);
    }
       else if (xya<=0) {

          if (x>y && x>a) {
             printf("μεγαλύτερο είναι το %d", x);
    }   
          else if (y>x && y>a) {
             printf("μεγαλύτερο είναι το %d", y);
    }
          else if (a>x && a>y) {
             printf("μεγαλύτερο είναι το %d", a);
    }

    }

    }

Contents


Διάβασμα τυχαίου πλήθους ακεραίων μέχρι να διαβαστεί ο '0' και τύπωμα τους σε αντίστροφη σειρά
απο: migf1
Κώδικας: Επιλογή όλων
    /* -------------------------------------------------------------
    * Διαβάζει ακέραιους από τον χρήστη μέχρι να διαβάσει τον 0,
    * οπότε σταματάει το διάβασμα και τυπώνει τους διαβασμένους
    * ακέραιους σε αντίστροφη σειρά.
    * Το πρόγραμμα χρησιμοποιεί recursion
    * -------------------------------------------------------------
    */

    #include <stdio.h>

    // ------------------------------------------------
    void print_reverse( int n )
    {
       if ( n == 0 )
          return;

       printf("enter an int (0 to stop): ");
       scanf("%d", &n);
       print_reverse( n );

       printf("%d ", n);
       return;
    }

    // ------------------------------------------------
    int main ( void )
    {
       int n;
       print_reverse(n);

       return 0;
    }


Contents


Εύρεση του παραγοντικού Ν
απο: migf1
Κώδικας: Επιλογή όλων
    /* -------------------------------------------------------------
    * Διαβάζει έναν φυσικό αριθμό από το 1 έως το 33 και χρησιμοποιεί
    * recursion για να υπολογίζει το το παραγοντικό του
    * -------------------------------------------------------------
    */

    #include <stdio.h>

    // ------------------------------------------------
    unsigned long int factorial( int n )
    {
       if ( n == 1 )
          return 1;

       return n * factorial( n-1 );
    }

    // ------------------------------------------------
    int main ( void )
    {
       int n;

       do {
          printf("enter a natural num (1-33): ");
          scanf("%d", &n);
       } while (n < 1 || n > 33);

       printf("factorial of %d: %lu\n", n, factorial(n) );

       return 0;
    }


Contents


Υπολογίζει το άθροίσμα των πρώτων αριθμών απο 1 εως ΜΑΧ
απο: migf1
Κώδικας: Επιλογή όλων
    /* -------------------------------------------------------------
    * Τυππωνει και αθροίζει του πρώτους αριθμούς από το 1 έως το MAX
    * -------------------------------------------------------------
    */
    #include <stdio.h>
    #include <math.h>

    #define MAX   15

    int main ( void )
    {
       long primesum = 0;
       register int i, j;
       int isprime = 1;

       for (i=2; i <= MAX; i++)
       {
          for (j=2; j<=sqrt(i); j++)
          {
             if ( i%j == 0 ) {
                isprime = 0;      // FALSE
                break;
             }
          }

          if ( isprime ) {
             printf("%d is a prime\n", i);
             primesum += i;
          }

          isprime = 1;            // TRUE
       }

       printf("\nSum of prime numbers from 1 to %d = %ld\n",  MAX, primesum);

       return 0;
    }

Contents


Άνοιγμα και προσθήκη συμβολοσειράς στο τέλος ενός αρχείου.
απο: Star_Light
Κώδικας: Επιλογή όλων
    #include <stdio.h>
    int main()
    {
       FILE *ptr; /*the file pointer*/
       char *str="links.txt";

        ptr=fopen(str,"a"); /*EPISTROFI deikti tipou FILE apo tin fopen
        enw an sumvei la8os sti diarkeia tis diadikasias anoigmatos enos arxeiou 8a epistrepsei
        enan deikti NULL diladi enan deikti pou deixnei se mi egkura dedomena */
     
        fprintf(ptr,"The end of file");
        fclose(ptr);
       
       return 0;
       
    }

Contents


Υπολογισμός παραγοντικού/δύναμης με χρήση της switch
απο: Star_Light
Κώδικας: Επιλογή όλων
    /*==========================

    Upologismos paragontikou h dunamis enos arithmou
    analoga me tin epilogi tou xrhsth mesw tis switch
    =============================

    */
    #include<stdio.h>
    int main()
    {
       int r;
       int n;
       int a;
       char flag;
       

       
           printf("Dwste enan akeraio arithmo: ");
           scanf("%d",&a);
           printf("Dwste ton akeraio ektheti: ");
           scanf("%d",&n);
           printf("Dwste A gia ton upologismo tou paragontikou H B gia tin dunami : \n");
           scanf("%c",&flag);
           flag=getchar();
         
         
          switch(flag)
          {
             case 'A':
                      r=paragontiko(n);
                        printf("To apotelesma einai: %d \n",r);
                        break;
                     
               case 'B':
                        r= dunami(a,n);
                        printf("To apotelesma einai: %d\n",r);
                        break;
                        default:
                        printf("Den dwsate ta swsta stoixeia. Ksanadokimaste: \n");
                        break;
                     
                 }
       
       return 0;
    }
    int paragontiko(int n)
    {
       if (n==0)
       return 1;
       else
       return n * paragontiko((n-1));
    }
    int dunami(int a , int n)
    {
       if(n==0)
       return 1;
       else
       return a * dunami(a , n-1);
    }



Contents


Διαβάζει ένα string από τον χρήστη και του απαντάει αν είναι παλινδρομικός
απο: migf1
Κώδικας: Επιλογή όλων
/* ---------------------------------------------------------------------
* Διαβάζει ένα string από τον χρήστη και του απαντάει αν είναι παλινδρομικό.
* Παλινδρομικά (ή καρκινικά) ονομάζονται όσα strings διαβάζονται κι από τις μεριές
* ---------------------------------------------------------------------
*/

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

// ------------------------------------------------------------------------------------
int s_ispalindrome(char *s)
{
   if ( !s )               // early exit
      return 0;

   char *cp1, *cp2;

   cp2 = s + strlen(s) - 1;         // set cp2 at end of s
   for (cp1=s; cp1 < cp2 && *cp1 == *cp2; cp1++, cp2--)
      ;

   return (cp1 >= cp2);
}

//-------------------------------------------------------------------------------------
int main( void )
{
   char s[256] = "";

   printf("Enter your string: ");
   fgets(s, 256, stdin);
   s[ strlen(s)-1 ] = '\0';

   printf(   "\t\"%s\" is%s palindromic\n",
      s,
      s_ispalindrome(s) ? "" : " not"
   );

   exit( EXIT_SUCCESS );
}

Contents


Εξάσκηση σε pointers-παράδειγμα_1
απο: linuxs
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

int main(void){
   int rate;
   int *ptr_rate;

      rate=100;
      ptr_rate = &rate;
      
      printf("%d \n", rate);
      printf("%p \n", &rate);
      printf("%p \n", ptr_rate);
      printf("%d \n", *ptr_rate);
return 0;
}

Contents


Εξάσκηση σε pointers-παράδειγμα_2
απο: linuxs
Κώδικας: Επιλογή όλων
# include <stdio.h>

int main(){
       int var1;
       float var2;
       char var3;
       int *p_var1;
       float *p_var2;
       char *p_var3;

      var1 = 32;
      var2 = 32.142564;
      var3 = 'f';
      p_var1 = &var1;
      p_var2 = &var2;
      p_var3 = &var3;

      printf("\n %d \n %f \n %c \n", var1, var2, var3);
      printf("\n %p \n %p \n %p \n", p_var1, p_var2, p_var3);

return 0;
}
}

Contents


Εξάσκηση σε pointers-παράδειγμα_3
απο: linuxs
Κώδικας: Επιλογή όλων
#include <stdio.h>

int var = 1;
int *ptr;

int main(void){
   ptr=&var;
   
   printf(" \n Direct access, var = %d", var);
   printf(" \n Indirect access, var = %d", *ptr);
   printf(" \n\n The address of var = %p", &var);
   printf(" \n The address of var = %p \n", ptr);
   
return 0;
}


Contents


Εξάσκηση σε αρχεία-παράδειγμα_1
απο: linuxs
Κώδικας: Επιλογή όλων
/* Opens and reads a file using fgets */

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

int main(void){
   FILE *infile;
   char buf[81];
      infile = fopen("lala.txt","r");
      if(infile == NULL){
         printf("File does not exist.\n");
         exit(1);
      }
      while(fgets(buf, 81, infile) != NULL){
         fputs(buf, stdout);
      }
      fclose(infile);
   return 0;
}


Contents


Εναλλαγή δυο δεικτών ανεξαρτήτου τύπου
απο: migf1
Κώδικας: Επιλογή όλων
/* --------------------------------------------------------------------------
* Παράδειγμα εναλλαγής δυο δεικτών (pointer swapping) ανεξαρτήτως τύπου.
* Τα ορίσματα της συνάρτησης swap_pointers() ορίζονται με τον γενικο τύπο: void,
* ώστε κατά την κλήση της συνάρτησης και με το αντίστοιχο type casting
* να λειτουργεί σωστά με οποιονδήποτε τύπο δεικτών.
*
* Το πρόγραμμα παρουσιάζει κώδικα για την εναλλαγή δεικτών σε 2 απλούς int,
* σε 2 συμβολοσειρές, σε 2 πίνακες από int και σε 2 struct.
* --------------------------------------------------------------------------
*/
#include <stdio.h>
#include <stdlib.h>

#define MAX_ARRELEMS   5      // απλά μια βοηθητική σταθερά

// -----------------------------------------------------------------------------------
// Η βασική μας συνάρτηση που εναλλάσσει δυο δείκτες, ανεξαρτήτως τύπου
//
void swap_pointers( void **x, void **y)
{

   void *temp = *x;
   *x = *y;
   *y = temp;

   return;
}

// -----------------------------------------------------------------------------------
// βοηθητική συνάρτηση  που τυπώνει τα στοιχεία ενός πίνακα από int arr, μεγέθους len
//
void print_array( int arr[], int len )
{
   register int i;
   for (i=0; i < len; i++)
      printf("%d ", arr[i]);

   return;
}

// -----------------------------------------------------------------------------------
int main( void )
{
   // swapping int pointers

   int x=10, y=20;
   int *px = &x, *py = &y;

   puts("\nSWAPPING INTEGER POINTERS\n-------------------------");
   printf("before:\t\tpx = %d,\tpy = %d\n", *px, *py);
   swap_pointers( (void **) &px, (void **) &py );
   printf("after :\t\tpx = %d,\tpy = %d\n\n", *px, *py);

   // swapping char pointers

   char *cpx = "string 1";
   char *cpy = "string 2";

   puts("\nSWAPPING CHARACTER POINTERS\n---------------------------");
   printf("before:\t\tcpx = \"%s\",\tcpy = \"%s\"\n", cpx, cpy);
   swap_pointers( (void **) &cpx, (void **) &cpy );
   printf("after :\t\tcpx = \"%s\", \tcpy = \"%s\"\n\n", cpx, cpy);

   // swapping array pointers

   int xarr[MAX_ARRELEMS] = { 0, 1, 2, 3, 4 };
   int yarr[MAX_ARRELEMS] = { 5, 6, 7, 8, 9 };
   int *pxarr = xarr, *pyarr = yarr;

   puts("\nSWAPPING ARRAY POINTERS\n-----------------------");
   printf("before:\t\tpxarr = { ");
   print_array( pxarr, MAX_ARRELEMS);
   printf("}\tpyarr = { ");
   print_array( pyarr, MAX_ARRELEMS);
   puts("}");

   swap_pointers( (void **) &pxarr, (void **) &pyarr );

   printf("after :\t\tpxarr = { ");
   print_array( pxarr, MAX_ARRELEMS);
   printf("}\tpyarr = { ");
   print_array( pyarr, MAX_ARRELEMS);
   puts("}\n");

   // swapping struct pointers

   struct test { float w; float z; char s[256]; };
   struct test xst = { .w = 10.0, .z = 20.0, .s = "x-string"};
   struct test yst = { .w = 30.0, .z = 40.0, .s = "y-string" };
   struct test *pxst = &xst, *pyst = &yst;

   puts("\nSWAPPING STRUCT POINTERS\n------------------------");
   printf(   "before:\t\tpxst = {%.1f %.1f \"%s\"}\tpyst = {%.1f %.1f \"%s\"}\n",
      pxst->w, pxst->z, pxst->s, pyst->w, pyst->z, pyst->s
   );
   swap_pointers( (void **) &pxst, (void **) &pyst );
   printf(   "before:\t\tpxst = {%.1f %.1f \"%s\"}\tpyst = {%.1f %.1f \"%s\"}\n",
      pxst->w, pxst->z, pxst->s, pyst->w, pyst->z, pyst->s
   );

   fflush(stdin); getchar();
   exit( EXIT_SUCCESS);
}

Contents


Διάβασμα ενός string από τον χρήστη και μετατροπή του σε πραγματικό αριθμό
απο: migf1
Κώδικας: Επιλογή όλων
/* -----------------------------------------------------------------------------------
* Από: migf1
*
* Διάβασμα ενός string από τον χρήστη και μετατροπή του σε πραγματικό αριθμό.
*
* Το πρόγραμμα παρουσιάζει τον πλέον συμβατό και ασφαλή τρόπο να διαβάζει
* κανείς μεταβλητές οποιουδήποτε τύπου στη C, χωρίς να εξαρτάται από εν δυνάμει
* προβληματικές συναρτήσεις, όπως είναι η στάνταρ scanf().
*
* Στην προκειμένη περίπτωση το string μετατρέπεται σε double, αλλά μπορεί εξίσου
* εύκολα να μετατρταπεί σε οποινδήποτε άλλον τύπο, με χρήση της στάνταρ βιβλιοθήκης
* stdlib ( #include <stdlib.h> ).
*
* Η προτεινόμενη συνάρτηση είναι η strtod() η οποία δίνει πολλές δυνατότητας ελέγχου
* αποτυχίας της μετατροπής, με χρήση της καθολικής μεταβλητής errno (#include <errno.h)
* αλλά και του δείκτη: char *dummy στο 2ο όρισμά της. Εδώ παρουσιάζω μονάχα μερικές
* από αυτές τις δυνατότητες (για περισσότερες πληροφορίες, διαβάστε την τεκμηρίωση
* της συνάρτησης, στο manual της ).
*
* Ως ευκολότερη λύση για την μετατροπή, αλλά χωρίς δυνατότητα ελέγχου ενδεχόμενης
* αποτυχίας, παρουσιάζω και την συνάρτηση: atof() ( επίσης στη βιβλιοθήκη: stdlib) ).
*
* -----------------------------------------------------------------------------------
*/

#include <stdio.h>
#include <errno.h>            // για έλεγχο του errno
#include <stdlib.h>            // για τις atof(), strtod() και exit()

#define MAX_LINE   255+1         // μέγιστο μήκος της γραμμής εισόδου

// -----------------------------------------------------------------------------------
// Ανάγνωση του string s από την κύρια είσοδο μέχρι να πατηθεί ENTER ή να συμπληρωθούν
// malen-1 χαρακτήρες.
// Επιστρέφει το αναγνωσμένο s με μηδενισμένο τον τελικό του χαρακτήρα (αντικαθιστώντας
// το ENTER, αν ήταν αυτό ο τελικός χαρακτήρας). Σε περίπτωση σφάλματος επιστρέφει NULL.
// ΣΗΜΑΝΤΙΚΟ:
//   το s πρέπει να είναι ήδη δημιουργημένο και να έχει χώρο για τουλάχιστον maxlen
//   χαρακτήρες!
//
char *s_get(char s[], int maxlen)
{
   register int i;

   for (i=0; (s[i]=getchar()) != '\n' && i < maxlen-1; i++)
                ;            // for-loop με κενό σώμα
        s[i] = '\0';            // μηδενισμός του τελικού χαρακτήρα

        return s;
}

// -----------------------------------------------------------------------------------
int main( void )
{
   extern int errno;            // defined in <errno.h>
   char line[MAX_LINE];            // η γραμμή ειδόδου (string)
   char *dummy;               // για την strtod()
   double num = 0.0;            // το αποτέλεσμα της μεταροπής

   printf("Enter any real number:  ");
   s_get( line, MAX_LINE);
   printf("You entered the string: %s\n", line);

   // μετατροπή με την atof()
   num = atof( line );           
   printf("\nConverted to double with atof()   it gives: %g\n", num);

   // μετατροπή με την strtod()
   errno = 0;
   num = strtod( line, &dummy );
                     // έλεγχος αποτυχίας
   printf("\nConverted to double with strtod() it gives: %g\n", num);
   if (errno == ERANGE)
      puts("\t*** error: number too big or too small");
   if ( *dummy != '\0')
      printf("\t*** info: \"%s\" was invalid so it was ignored\n", dummy);

   exit( EXIT_SUCCESS );
}

Contents


Απλοϊκό πρόγραμμα δημιουργίας και απεικόνισης γραφήματος μιας συνάρτησης: f(x) = a*x + b
απο: migf1
Κώδικας: Επιλογή όλων
    /* -----------------------------------------------------------------------
    * Από: migf1
    *
    * Πολύ απλοϊκό παράδειγμα προγράμματος κονσόλας που παράγει το γράφημα μιας
    * συνάρτησης: f(x) = a*x + b στο πρώτο τεταρτημόριο του καρτεσιανού επιπέδου.
    *
    * Μπορείτε να αλλάξετε την συνάρτηση, αλλά σημειώστε πως το πρόγραμμα απεικονίζει
    * μονάχα όσα σημεία παράγονται στην περιοχή: (0,0) ... (74,22)
    * -----------------------------------------------------------------------
    */

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

    #define   MAXCOLS      75      // μέγιστο πλάτος της οθόνης μας
    #define MAXROWS      23      // μέγιστο ύψος της οθόνης μας

    #define PIXEL_ON   '#'      // χαρακτήρας απεικόνισης "αναμμένων" pixels
    #define PIXEL_OFF   '.'      // χαρακτήρας απεικόνισης "σβησμένων" pixels

    #define VALIDPIXEL(x,y, w,h)   ( (y) > -1 && (y) < (h) && (x) > -1 && (x) < (w) )
    #define REVAXIS(y,h)   (h) - (y) - 1   // αλλάζει την συντεταγμένη y ώστε το σημείο
                   // στο οποίο αντιστοιχεί να απεικονιστεί στην
                   // αντεστραμμένη φορά του άξονά (χρήσιμο για τον
                   // άξονα Υ που τον θέλουμε να μετράει από κάτω
                   // προς τα πάνω)

    typedef struct screen {
       int nrows;         // τρέχον πλάτος της οθόνης μας
       int ncols;         // τρέχον ύψος της οθόνης μας
       char pixel[MAXROWS][MAXCOLS];   // όλα τα pixels της οθόνης μας
    } Screen;

    // ------------------------------------------------------------------------------------
    // Η συνάρτηση που παράγει το γράφημα (δοκιμάστε και με άλλες τιμές)
    //
    int f( int x )
    {
       return x/3+1;
    }

    // ------------------------------------------------------------------------------------
    // "Ανάβει" το pixel (x,y) ώστε να εμφανιστεί αναμένο όταν αργότερα τυπωθεί η οθόνη
    // μέσω της συνάρτησης: draw_screen()
    //
    void set_pixel( Screen *screen, int x, int y )
    {
       if ( !VALIDPIXEL(x,y, screen->ncols, screen->nrows ) )
          return;

       y = REVAXIS(y, screen->nrows);   // make y-axis to start from bottom to top
       screen->pixel[y][x] = PIXEL_ON;

       return;
    }

    // ------------------------------------------------------------------------------------
    // "Σβήνει" όλα τα pixels της οθόνης, ώστε να εμφανιστούν σβησμένα όταν αργότερα
    // τυπωθεί η οθόνη μέσω της συνάρτησης: draw_screen()
    //
    void clear_screen( Screen *screen )
    {
       register int x,y;

       for (y=0; y < screen->nrows; y++)
          for (x=0; x < screen->ncols; x++)
             screen->pixel[y][x] = PIXEL_OFF;

       return;
    }

    // ------------------------------------------------------------------------------------
    // Τυπώνει όλα τα pixels της οθόνης μας (αναμμένα και σβηστά) καθώς και την αρίθμηση
    // των αξόνων Χ και Υ
    //
    void draw_screen( Screen screen )
    {
       register int x, y;

       for (y=0; y < screen.nrows; y++)
       {
          // display value-labels to the left of y-axis
          int ylab = y;
          printf("%3d ", REVAXIS(ylab, screen.nrows) );

          // display yth row of pixels
          for (x=0; x < screen.ncols; x++)
             putchar( screen.pixel[y][x] );
          putchar('\n');
       }

       // display value-labels under x-axis
       printf("Y/X ");
       for (x=0; x < screen.ncols; x++)
          printf("%d", x%10);
       putchar('\n');

       return;
    }

    // ------------------------------------------------------------------------------------
    int main( void )
    {
       register int x=0;
       Screen screen = { .ncols = MAXCOLS, .nrows = MAXROWS };

       clear_screen( &screen );      // σβήσιμο όλων των pixels
       for (x=0; x < screen.ncols; x++)   // άναμμα μόνο όσων pixels...
          set_pixel( &screen, x, f(x) );   // ... υπολογιζει η συνάρτηση f(x)
       draw_screen( screen );         // τύπωμα όλων των pixels

       exit( EXIT_SUCCESS );
    }


Output: http://img6.imageshack.us/img6/7920/image2ks.jpg
Contents




Παράδειγμα καταχώρησης 3 εγγραφών σε αρχείο, και κατόπιν αλλαγή της 3ης και της 1ης
απο: migf1
Κώδικας: Επιλογή όλων
/* -------------------------------------------------------------
* Από: migf1
* Παράδειγμα καταχώρησης 3 εγγραφών σε αρχείο, και κατόπιν αλλαγή της 3ης και της 1ης
* -------------------------------------------------------------
*/

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

#define MAXLEN_ID   (3+1)            // μέγιστο μήκος κωδικού
#define MAXLEN_NAME   (25+1)            // μέγιστο μήκος ονόματος

#define myexit(n) printf("\npress ENTER to exit..."); fflush(stdin); getchar(); exit((n))

typedef enum { FALSE=0, TRUE } bool;

typedef struct rec {               // δομή εγγραφής
   char id[ MAXLEN_ID ];            // κωδικός
   char name[ MAXLEN_NAME ];         // όνομα
} Rec;


// ------------------------------------------------------------------------------------
// Αντιγραφή του string: src στο string: dst (έως n-1 χαρακτήρες)
//
char *s_ncopy( char *dst, const char *src, int n )
{
   char *save = dst;

   while ( (dst-save) < n-1 && (*dst=*src) != '\0' )
      dst++, src++;

   if ( *dst )
      *dst = 0;

   return save;
}

// ------------------------------------------------------------------------------------
// Δημιουργία της εγγραφής: rec στην μνήμη, με κωδικό: id και όνομα: name
//
Rec *rec_set( Rec *rec, const char *id, const char *name )
{
   if ( !rec )
      return NULL;

   s_ncopy( rec->id,    id,   MAXLEN_ID );
   s_ncopy( rec->name,   name,   MAXLEN_NAME );

   return rec;
}

// ------------------------------------------------------------------------------------
// Ανάγνωση της εγγραφής: rec που βρίσκεται στη θέση: fpos του αρχείου: fp
//
bool rec_fread( FILE *fp, const int fpos, Rec *rec )
{
   if ( !fp )
      return FALSE;

   if ( fseek( fp, (fpos-1) * sizeof(Rec), SEEK_SET ) != 0 )
      return FALSE;

   if ( fread( rec, sizeof(Rec), 1, fp ) != 1 )
      return FALSE;

   return TRUE;
}

// ------------------------------------------------------------------------------------
// Καταχώρηση της εγγραφής: newrec στη θέση: fpos του αρχειου: fp
//
bool rec_fwrite( FILE *fp, const int fpos, const Rec *newrec )
{
   if ( !fp )
      return FALSE;

   if ( fseek( fp, (fpos-1) * sizeof(Rec), SEEK_SET ) != 0 )
      return FALSE;

   if ( fwrite( newrec, sizeof(Rec), 1, fp ) != 1 )
      return FALSE;

   return TRUE;
}

// ------------------------------------------------------------------------------------
// Ανάγνωση και τύπωμα όλων των εγγραφών του αρχείου: fp
//
bool f_print( FILE *fp )
{
   if ( !fp )
      return FALSE;

   if ( fseek( fp, 0, SEEK_SET ) != 0 )   // μεταπήδηση στην αρχή του αρχείου
      return FALSE;
     
   Rec rec;            // προσωρινή εγγραφή

   puts("File Contents\n-------------");
   while ( fread( &rec, sizeof(Rec), 1, fp ) )
      printf( "%s %s\n", rec.id, rec.name );

   putchar('\n');

   return TRUE;
}

// ------------------------------------------------------------------------------------
int main( void )
{
   char fname[] = "b.txt";            // το όνομα του αρχείου
   Rec rec = { .id="", .name="" };         // προσωρινή δομή εγγραφής

   FILE *fp = fopen( fname, "w+" );      // άνοιγμα του αρχείου
   if ( !fp ) {               // αποτυχία
      puts("*** fatal error: fopen() failed");   // προώρος τερματισμός
      myexit(1);
   }

   /* αποθήκευση 3 εγγραφών (χωρίς έλεγχο για σφάλματα) */

   rec_set( &rec, "001", "Giorgos" );      // αποθήκευση 1ης εγγραφής
   rec_fwrite( fp, 1, &rec );

   rec_set( &rec, "002", "Xristos" );      // αποθήκευση 2ης εγγραφής
   rec_fwrite( fp, 2, &rec );

   rec_set( &rec, "003", "Petros" );      // αποθήκευση 3ης εγγραφής
   rec_fwrite( fp, 3, &rec );

   f_print( fp );               // εμφάνιση περιεχομένων αρχείου

   /* αλλαγή εγγραφών 3 και 1 (με έλεγχο για σφάλματα) */

   rec_set( &rec, "003", "Basilhs" );      // ΑΛΛΑΓΗ 3ης εγγραφής
   if ( !rec_fwrite( fp, 3, &rec ) )
      puts("\t*** error: write file error");

   rec_set( &rec, "001", "Maria" );      // ΑΛΛΑΓΗ 1ης εγγραφής
   if ( !rec_fwrite( fp, 1, &rec ) )
      puts("\t*** error: write file error");

   if ( !f_print( fp ) )            // εμφάνιση περιεχομένων αρχείου
      puts("\t*** error: read file error");

   fclose( fp );               // κλείσιμο του αρχείου
   myexit(0);               // τερματισμός του προγράμματος
}

Contents


Άθροισμα 2 αιθμών(χρήση δεικτών-tricky)
απο: Star_Light
Κώδικας: Επιλογή όλων
    #include<stdio.h>
    #define N 0; /*Οριζω το Ν σαν 0 μεσω της define εντολης του προεπεξεργαστη */
    void test(int *sum);

    int main()
    {
    int x;
    int y;
    int sum;

    printf("Dwse to x:");
    scanf("%d",&x);
    printf("Dwse to y: ");
    scanf("%d",&y);

    sum=x+y;
    test(&sum);
    /*Κληση της συναρτησης test που παιρνει σαν ορισμα την διευθυνση της μεταβλητης sum οποτε θα επενεργησει απευθειας πανω της μολις κληθει ανεξαρτητα απο τις εισοδους του χρηστη */
    printf("To apotelesma tis pros8esis einai: \t %d \t",sum);

    /*Επομενως το αποτελεσμα θα ειναι παντα 10 ασχετα με την εισοδο επειδη η συναρτηση κανει την "βρωμοδουλεια" της στη μνημη μεσα */

    printf("Ops kati pige strava eimai diavoliko mixanima!!!");

    return N;
    }
    void test(int *sum)
    {
    *sum=10;

    return;
    }


Contents


Πρόγραμμα που διαβάζει ένα string, το αντιστρέφει και το τυπώνει
απο: migf1
Κώδικας: Επιλογή όλων
    /* --------------------------------------------------------------
    * Από: migf1
    * Διάβασμα ενός string, αντιστροφή του και τύπωμά του στην οθόνη
    * --------------------------------------------------------------
    */

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

    // ------------------------------------------------------------------------------------
    // Διαβάζει έως len-1 χαρακτήρες ή μέχρι να πατηθεί ENTER και τους αποθηκεύει στο string
    // s. Επιστρέφει το s χωρίς το ENTER και με μηδενισμένο τον τελικό χαρακτήρα
    //
    char *s_get(char *s, size_t len)
    {
            char *cp;

            for (cp=s; (*cp=getc(stdin)) != '\n' && (cp-s) < len-1; cp++ )
                    ;               // for-loop with empty body
            *cp = '\0';               // null-terminate last character

            return s;
    }

    // ------------------------------------------------------------------------------------
    // Αντιστρέφει το string s. Βάζει από έναν δείκτην στην αρχή και το τέλος του s, κι
    // εναλλάσει τους χαρακτήρες τους μέχρι να συναντηθούν οι δυο δείκτες στη μέση του s
    // ΣΗΜΑΝΤΙΚΟ:  το s πρέπει να είναι ήδη δημιουργημένο.
    //
    char *s_reverse(char *s)
    {
       if ( !s )               // early exit
          return NULL;

       char *cp1, *cp2, dummy;

       cp2 = s + strlen(s) - 1;         // set cp2 at end of s
       for (cp1=s; cp1 < cp2; cp1++, cp2--) {
          dummy = *cp1;
          *cp1 = *cp2;
          *cp2 = dummy;
       }

       return s;
    }

    // ----------------------------------------------------------------------------------------
    int main( void )
    {
       char s[255+1];

       printf("Enter a string: ");
       s_get(s, 256);
       printf("Your string revesred is:\n\t%s", s_reverse(s) );

       fflush(stdin); getchar();
       exit( EXIT_SUCCESS );
    }



Contents


Διαβάζει αριθμούς μέχρι να διαβαστεί ο αριθμός 999 οπότε σταματά η διαδικασία ανάγνωσης(λεπτομέριες μέσα στο πρόγραμμα)
απο: migf1
Κώδικας: Επιλογή όλων
    /* Από: migf1
    Να γραφεί πρόγραμμα που να διαβάζει αριθμούς μέχρι να διαβαστεί ο αριθμός 999 οπότε σταματά η διαδικασία ανάγνωσης. Για τον λόγο αυτό να γίνει χρήση της εντολής do while. Να εμφανίζεται το άθροισμα των διψήφιων αριθμών, θετικών και αρνητικών που εισήχθησαν στον υπολογιστή καθώς και το πλήθος των αριθμών που εισήχθησαν συνολικά.
    */

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

    #define ABS(x)      ( (x) > 0 ? (x) : -(x) )
    // ----------------------------------------------------------------------------------------
    int main( void )
    {
       int num, sum2=0, total=0;

       do {
          printf("Enter number #%d: ", total+1);
          scanf("%d", &num);
          if ( ABS(num) > 9 && ABS(num) < 100 )      // 2-digit number
             sum2 += num;
          total++;
       } while (num != 999);

       printf("\nYou entered %d numbers.\n", total);
       printf("The sum of the 2-digit ones amongst them was: %d\n", sum2);

       fflush(stdin); getchar();
       exit( EXIT_SUCCESS );
    }

Contents


Υλοποίηση και εκτέλεση βασικών συναρτήσεων της βιβλιοθήκης <string.h>
απο: linuxs
Κώδικας: Επιλογή όλων
/******************************************************************************
- Απο: linuxs

- Υλοποίηση και εκτέλεση βασικών συναρτήσεων της βιβλιοθήκης <string.h>

- Στο παρακάτω πρόγραμμα χρησιμοποιούντε οι συναρτήσεις: strlen(), strcpy(),
- strcmp(), strcat(), strstr(), strtok(). Για περισσότερες λεπτομέριες δείτε
- τις σχετικές συναρτήσεις. ;)
******************************************************************************/

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

void f_strlen(void) {
   char buf[100];
   int string_length;
      printf("\n***************--> strlen() example <--***************\n\n");
         printf("Please type a string:");
         scanf("%s", buf);
            string_length = strlen(buf);
         printf("The string you wrote has %d length!\n\n", string_length);
}

void f_strcpy(void) {
   char source[100]="This is the source";
   char target[100]="-";
      printf("\n***************--> strcpy() example <--***************\n\n");
         printf("Before the copy:\nsource: %s\ntarget: %s\n", source, target);
            strcpy(target,source);
         printf("After the copy:\nsource: %s\ntarget: %s\n", source, target);
}

void f_strcmp(void) {
   char source[100]="abcdefg";
   char target[100]="abcd";
   int res=0;
      printf("\n***************--> strcmp() example <--***************\n\n");
         printf("The 2 strings are:\nsource: %s\ntarget: %s\n", source, target);
            res = strcmp(source,target);
         if(res==0) {
            printf("The two strings are equal!\n");
         }else if(res>0) {
            printf("The %s is greater than the %s!\n", source, target);
         }else{
            printf("The %s is greater than the %s!\n", target, source);
         }
}

void f_strcat(void) {
   char source[100]="def";
   char target[100]="abc";
      printf("\n***************--> strcat() example <--***************\n\n");
         printf("Before the copy:\nsource: %s\ntarget: %s\n", source, target);
            strcat(target,source);
         printf("After the copy:\nsource: %s\ntarget: %s\n", source, target);
}

void f_strstr(void) {
   char source[100]="abcdef";
   char target[100]="cd";
   char *buf;
      printf("\n***************--> strstr() example <--***************\n\n");
         printf("Before the strstr:\nsource: %s\ntarget: %s\n", source, target);
            buf = strstr(source,target);
         printf("The begin of the substring is: %s\n", buf);
}

void f_strtok(void) {
   char source[100]="this is sparta";
   char *buf;
      printf("\n***************--> strtok() example <--***************\n\n");
         printf("Before the strtok:\nsource: %s\n", source);
            buf = strtok(source," ");
            while(buf != NULL ){
               printf("buf: %s\n", buf);
               buf=strtok(NULL," ");
            }
}

int main() {
   f_strlen();
   f_strcpy();
   f_strcmp();
   f_strcat();
   f_strstr();
   f_strtok();
}

Contents


Αντιστροφή λέξεων μιας πρότασης
απο: migf1
Κώδικας: Επιλογή όλων
/* ------------------------------------------------------------
* Από: migf1            Έκδοση ΧΩΡΙΣ Συνάρτηση
*
* Αντιστροφή λέξεων μιας πρότασης. Π.χ. το "γειά σου κόσμε"
* γίνεται "κόσμε σου γεια"
*
* Αλγόριθμος:
*   πρώτα αντιστρέφεται η αρχική πρόταση και κατόπιν διασπάται
*   στις λέξεις της, οι οποίες αντιστρέφονται εκ νέου πριν
*   τυπωθούν μια προς μια στην οθόνη.
* ------------------------------------------------------------
*/

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

// ------------------------------------------------------------------------------------
// Αντιστρέφει το string s. Βάζει από έναν δείκτην στην αρχή και το τέλος του s, κι
// εναλλάσει τους χαρακτήρες τους μέχρι να συναντηθούν οι δυο δείκτες στη μέση του s
// ΣΗΜΑΝΤΙΚΟ: το s πρέπει να είναι ήδη δημιουργημένο.
//
char *s_reverse(char *s)
{
   if ( !s )               // early exit
      return NULL;

   char *cp1, *cp2, dummy;

   cp2 = s + strlen(s) - 1;         // set cp2 at end of s
   for (cp1=s; cp1 < cp2; cp1++, cp2--) {
      dummy = *cp1;
      *cp1 = *cp2;
      *cp2 = dummy;
   }

   return s;
}

// ------------------------------------------------------------------------------------
int main( void )
{
   char s[255+1]="", *delims=" \t\n", *cp;

   printf("Enter a sentence: ");
   fgets(s, 256, stdin);

   s_reverse(s);
   cp = strtok(s, delims);
   while (cp != NULL) {
      printf("%s ", s_reverse(cp) );
      cp = strtok(NULL, delims);
   }
   putchar('\n');

   fflush(stdin); getchar();
   exit( EXIT_SUCCESS );
}


2ος τρόπος(ΧΡΗΣΗ ΣΥΝΑΡΤΗΣΗΣ)
Κώδικας: Επιλογή όλων
/* ---------------------------------------------------------------------------
* Από: migf1
* Υλοποίηση συνάρτησης: int myatoi(char *str) που μιμείται την συνάρτηση
* int int atoi(char *str) της στάνταρ βιβλιοθήκης stdlib
* ---------------------------------------------------------------------------
*/

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>

// ------------------------------------------------------------------------------------
int myatoi( const char *s )
{
   if ( !s || !*s )         // ανύπαρκτο ή μηδενικό s
      return 0;         // πρόωρη έξοδος

   //αγνοούμε τυχόν κενούς χαρακτήρες στην αρχή
   while (*s && isspace(*s) )
      s++;
   if ( !*s )
      return 0;

   // απαιτούμε ο 1ος χαρακτήρας να είναι είτε πρόσημο είτε ψηφίο
   if ( *s != '+' && *s != '-' && !isdigit( *s ) )
      return 0;

   int num = 0, sign = 0;         // ΣΗΜΑΝΤΙΚΕΣ αρχικοποιήσεις σε 0

   // καθορισμός προσήμου (αν υπάρχει)
   if ( *s == '+') {
      sign = 1;
      s++;
   }
   else if ( *s == '-') {
      sign = -1;
      s++;
   }

   // μετατροπή σε ακέραιο
   while ( *s )               // όσο υπάρχουν χαρακτήρες
   {
      if ( isdigit(*s) )         // ψηφίο, επεξεργάσου το
      {
         int temp = num * 10 + *s - '0';      // υπολογισμός
         if ( INT_MAX - temp < 0 ) {      // έλεγχος για overflow
            puts("integer overflow");
            num = INT_MAX;
            break;
         }

         num  = temp;
         s++;
      }
      else               // μη-ψηφιο, μην συνεχίσεις!
         break;
   }

   // προσθήκη προσήμου
   if ( sign != 0 )
      num = num * sign;

   return num;
}

// -------------------------------------------------------------------------------------
int main( void )
{
   char s[255+1] = "";

   printf("Enter a number (%d): ", INT_MAX);
   fgets(s, 256, stdin);
   printf("%d\n", myatoi2(s) );

   exit( EXIT_SUCCESS );
}


Contents


Υπολογισμός του χώρου που πιάνει στη μνήμη μια μεταβλητή τύπου struct
απο: migf1
Κώδικας: Επιλογή όλων
/* ------------------------------------------------------------
* Από: migf1
* υπολογισμός του χώρου που πιάνει στη μνήμη μια μεταβλητή τύπου struct,
* χωρίς χρήση του τελεστή sizeof
*/

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

// --------------------------------------------------------------------------------------
int main( void )
{
   struct test {
      int a;
      float b;
      char c[100];
   } test;
   struct test *p = &test;

   printf("The size of \"struct test\" is: %d bytes\n", (char *)(p+1) - (char *)p );

   exit( EXIT_SUCCESS );
}

Contents

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

[anchor]ex25[/anchor]
[size=125][color=#008040]Εκτύπωση των στοιχείων ενός πίνακα κανονικά και αντίστροφα[/color][/size]
[i]απο: [color=#FF0000]Star_Light[/color][/i]
/*==================================================
Aplo paradeigmataki me deiktes
ektupwsi twn stoixeiwn enos pinaka
kanonika kai stin sunexeia me tin antistrofi seira

23/7/11
Star_Light
==================================================== */

#include<stdio.h>
int main()

{
int *ip; /*integer pointer*/
int array[5]={5,10,15,20,25};

for(ip=array; ip<&array[5]; ip++)
{
printf("\n\n");
printf("%d",*ip);
}
while((*ip)!=5)
{
   ip--;
   printf("\n\n");
   printf("%d",*ip);
}

return 0;
}

Contents


Απλός χειρισμός strings | συγκρισεις / υπολογισμός μήκους
απο: Star_Light
Κώδικας: Επιλογή όλων
/*================================================
Aplos xeirismos strings | sugriseis / upologismos
mikous

23/7/11
================================================== */

#include<stdio.h>
#define MAX_STR1_LEN 11
#define MAX_STR2_LEN 10

int main()
{

char str1[MAX_STR1_LEN]="Hello mann";
char str2[MAX_STR2_LEN]="Hello man";

printf("To 1o string einai: %s \n\n ", str1);
printf("To 2o string einai: %s \n\n", str2);


printf("To apotelesma tis sugrisis einai: %d \n\n",strcmp(str1,str2)); /* H strcmp sugrinei ta 2 strings kai an einai isa
epistrefei 0 an str1 < str2 epistrefei arnitiko ari8mo < 0 an str1 > str2 epistrefei megalitero arithmo > 0 */

printf("To trexon mikos tis str1 einai : %ld \n\n", strlen(str1)); /* Dinei to trexon mikos i strlen kai oxi to megisto mikos tou */
printf("To trexon mikos tis str2 einai : %ld \n\n", strlen(str2));

return 0;
}


Contents


υπολογισμός αριθμών που διαιρούν τέλεια
απο: Star_Light
Κώδικας: Επιλογή όλων
    /*=============================================
    Upologismos arithmwn pou diairoun teleia
    enan sugkekrimeno arithmo pou tha dwsei o xristis
    mesa se ena euros timwn pou dinei pali o xristis

    27/7/11
    * Star_Light
    =============================================== */

    #include<stdio.h>

    int main()
    {
       int i,z,n;
       
       printf("Dwse to euros twn arithmwn: \n");
       scanf("%d",&n);
       printf("Dwse me poion arithmo thes na diairounte teleia: \n");
       scanf("%d",&z);
       
       printf("Akeraioi pou boroun na diairethoun plirws mesa sto [0,n=%d]: \n");
       for(i=0; i<=n; i++)
       {
          if(i%z==0)  /* To i%z einai upoloipo an auto sxesiaka isoutai me 0 diladi false
    tote den iparxei ipoloipo ara teleia diairesi
    */
          printf("%d\n",i);
       }
       
    return 0;
    }


Contents


Πολ/σμός και πρόσθεση με χρήση δεικτών
απο: Star_Light
Κώδικας: Επιλογή όλων
    /*=============================================
    * Aplo paradeigma xrhshs deiktwn
    * prosthesi mesw deiktwn && pollaplasiasmos :P
    *
    *
    * Star_Light
    =============================================== */


    #include<stdio.h>

    int main()
    {
       int *ptr;
       int x,y;
       int sum;
       int gin;
       
       
       printf("Dwste ton arithmo x: \n");
       scanf("%d",&x);
       printf("Dwste ton arithmo y: \n");
       scanf("%d",&y);
       
       sum=x+y;
       ptr=&sum;  /*Dinetai i dieuthinsi mnimis tis metavlitis sum ston deikti ptr */
                  /*O deiktis twra deixnei stin thesi mnimis opou exei apothikeutei h metavliti sum */
                  /* H metavliti sum exei mesa tis to apotelesma tis pros8esis 2 akeraiwn tou x kai tou y */
       
       printf("To apotelesma tis prosthesis einai: %d", *ptr); /* Me ton telesti diakopis anaforas ston deikti emfanizw
                                                               /* Ta periexomena tis thesis mnimis tou sum diladi to apotelesma
                                                               /*  Tis pros8esis toy x pou 8a dwsei o xristis (i kalitera) tou
                                                               /* tou arithmou x o opoios 8a apo8ikeutei stin 8esi mnimis p exei desmeutei
                                                              /* gia to x kai antistoixa tou arithmou y */
       
       gin=x*y;
       ptr=&gin;
       
       printf("\n");
       printf("To apotelesma tou pollaplasiasmou einai: %d", *ptr);
       
    return 0;
    }


Contents


Εκτύπωση των στοιχείων ενός πίνακα κανονικά και αντίστροφα
απο: Star_Light
Κώδικας: Επιλογή όλων

    /*==================================================
    Aplo paradeigmataki me deiktes
    ektupwsi twn stoixeiwn enos pinaka
    kanonika kai stin sunexeia me tin antistrofi seira

    23/7/11
    Star_Light
    ==================================================== */

    #include<stdio.h>
    int main()

    {
    int *ip; /*integer pointer*/
    int array[5]={5,10,15,20,25};

    for(ip=array; ip<&array[5]; ip++)
    {
    printf("\n\n");
    printf("%d",*ip);
    }
    while((*ip)!=5)
    {
       ip--;
       printf("\n\n");
       printf("%d",*ip);
    }

    return 0;
    }


Contents
Τελευταία επεξεργασία από linuxs και 02 Αύγ 2011, 17:39, έχει επεξεργασθεί 57 φορά/ες συνολικά
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό clepto » 03 Ιούλ 2011, 21:11

μπορείς κάποιος άλλος να βάζει προγράμματα εδώ;
ακόμα και λυμένες ασκήσεις;
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

Δημοσίευσηαπό migf1 » 03 Ιούλ 2011, 21:15

Εμένα μου αρέσει αυτό σαν ιδέα!

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

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 03 Ιούλ 2011, 21:27

clepto έγραψε:μπορείς κάποιος άλλος να βάζει προγράμματα εδώ;
ακόμα και λυμένες ασκήσεις;
Φυσικά!!! :D Εγώ την αρχή έκανα μόνο...

migf1 έγραψε:Πως σας ακούγεται; Fun ή χάλια;

:P χαχαχαχα... πολυ fun!!! ...απλά, σκεφτόμουν ΤΟΥΛΑΧΙΣΤΟΝ να ξεκινήσει ως ιδέα και να μπούν κάποια προγράμματα! εάν πάει καλά βλέπουμε...αλλα η ιδέα σου δεν κρίνεται μόνο απο μένα! :| βλέπουμε! όρεξη να υπάρχει... εμμμ και καλοκαίρι φυσικα... :P
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 03 Ιούλ 2011, 21:29

Nice!

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 03 Ιούλ 2011, 21:29

clepto έγραψε:μπορείς κάποιος άλλος να βάζει προγράμματα εδώ;
ακόμα και λυμένες ασκήσεις;


Μπορώ επίσης να τα προσθέτω στο αρχικό ποστ ώστε να είναι όλα μαζεμένα! :D ...και κάτω απο κάθε παράδειγμα θα μπορούσα να γράφω τον "δημιουργό"...
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 03 Ιούλ 2011, 21:31

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό Qdata » 03 Ιούλ 2011, 21:33

clepto έγραψε:μπορείς κάποιος άλλος να βάζει προγράμματα εδώ;
ακόμα και λυμένες ασκήσεις;


Ναι, τώρα μου ήρθε μια ιδέα!Ετοιμάζω κάτι και postάρω εδώ. :)
Linux User: #530165
Γνώσεις ⇛ Linux: Μέτριο ┃ Προγραμματισμός: Ναι ┃ Αγγλικά: Καλά
Λειτουργικό ⇛ Ubuntu 11.04 32bit σε Intel(R) Atom(TM) CPU N270 @ 1.60GHz
(Notebook) Προδιαγραφές ⇛ 2x Intel(R) Atom(TM) CPU N270 @ 1.60GHz │ 1016MB │ HDA-Intel - HDA Intel -- USB-Audio - USB AUDIO│ 1024x600 pixels
Νέος στο Linux?Οδηγοί - How to - Tutorials
Qdata
powerTUX
powerTUX
 
Δημοσιεύσεις: 1875
Εγγραφή: 18 Ιουν 2010, 19:40
Τοποθεσία: Σέρρες
IRC: dimos
Εκτύπωση

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό migf1 » 03 Ιούλ 2011, 21:34

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

Re: Προγράμματα & παραδείγματα στην C

Δημοσίευσηαπό linuxs » 03 Ιούλ 2011, 21:37

Θα μπορούσαμε να κάνουμε απλά προγραμματάκια που να υπολογίζουν άθροισμα ακεραίων, άρτιων, περιττων, κτλ και τέλος να ενοποιηθούν σε συναρτήσεις σε ένα εννιαίο πρόγραμμα! ε? :/
Αν το πρόβλημά μας επιλυθεί. Επιλέγουμε το θέμα που βοήθησε στην επίλυση και πατάμε το κουμπάκι Εικόνα.
Γνώσεις ⇛ Linux: Μέτριο┃Προγραμματισμός: C┃Αγγλικά: Καλά
Λειτουργικό ⇛ Linux Ubuntu 10.4 LTS
Προδιαγραφές ⇛ Intel Pentium @T4500 2.3GHz│ 512GB VRAM│ 500 HDD│ ATI RADEON HD545v 512 MB │ Screen: 15.6''
Άβαταρ μέλους
linuxs
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1060
Εγγραφή: 02 Ιούλ 2010, 13:19
Τοποθεσία: GR
IRC: linuxs
Εκτύπωση

Επόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Μαθήματα C

cron