Ασκήσεις στην C

venividivici

Τιμώμενο Μέλος

Η venividivici αυτή τη στιγμή δεν είναι συνδεδεμένη. Έχει γράψει 23,236 μηνύματα.
Πρόγραμμα 20
(Υπολογισμός του παραγοντικού ακεραίων αριθμών με τη χρήση

συνάρτησης της C)
/*


Υπολογισμός του παραγοντικού ακεραίων αριθμών με τη χρήση
συνάρτησης */
#include <stdio.h>
double parag(int);
int main()
{
int i,nmin,nmax;
printf("dose arxikh kai telikh timh \n");
/*


Χρήση της scanf για την ταυτόχρονη καταχώρηση δυο μεταβλητών
*/
scanf("%d%d", &nmin, &nmax);
for (i=nmin;i<=nmax;i++)
if(parag(i)==-1)
{
printf("Arnhtikos akeraios %d\n",i);
continue;
}
else printf("%d \t %.lf \n",i,parag(i));
return 0;
}
/*


Συνάρτηση υπολογισμού του παραγοντικού
Αν ο ακέραιος είναι αρνητικός η συνάρτηση επιστρέφει
το -1 ως ένδειξη ότι ο υπολογισμός δεν ημπορεί να
γίνει αφού το παραγοντικό υπολογίζεται μόνο για
θετικούς ακεραίους */
double parag(int n)
{
double p=1;
int i;
if(n<0) return -1;
/*


Το (double) υποχρεώνει την μετατροπή του i σε
διπλής ακρίβειας μόνο για τον συγκεκριμένο υπολογισμό */
else if (n>1) for(i=1;i<=n;i++) p*=(double)i;
return p;
}

δες εδώ περισσότερα
https://www.mpipks-dresden.mpg.de/~hskokos/Teaching_Prog1/Programs.pdf

 

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

nefi

Πολύ δραστήριο μέλος

Η nefi αυτή τη στιγμή δεν είναι συνδεδεμένη. Μας γράφει απο Θεσσαλονίκη (Θεσσαλονίκη). Έχει γράψει 1,097 μηνύματα.
hi παιδια , εχω μια εργασια η οποια με δυσκολευει δεν ξερω καν απο που να αρχισω και ποτε δεν μας εδειξε κατι παρομοιο ο καθηγητης μας,αν μπορειτε να βοηθησετε θα το εκτιμουσα πολυ!
https://www.megaupload.com/?d=WODQYP4H

https://www.freeupload.cn/download.php?file=623169
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 13 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Γεια σας...είμαι καινούργιος εδώ και αν γινόταν θα ήθελα μια βοήθεια σε μια άσκηση προγραμματισμού...
Γράψτε κώδικα σε c τον αναδρομικό αλγόριθμο εύρεσης ελαχίστου αριθμού σε έναν μη ταξινομημένο
μονοδιάστατο πίνακα Τ με n θέσεις. Ως έξοδο να επιστρέφει εκτός από την τιμή του ελαχίστου στοιχείου (a)
και τη θέση του (index) στον πίνακα Τ.
Αυτή είναι ακριβώς η εκφώνηση..Ευχαριστώ :)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
καλο θα ηταν να γραψεις τη προσπαθεια σου και το κομματι που σε δυσκολευει :)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Guest 209912

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Code:
int i;
int min=T[0]; // Θετεις ως ελάχιστο στοιχείο του πίνακα το πρώτο του στοιχείο
int index=0;

for (i=1;i<n;i++) // Τρέχεις τον πίνακα
{
  if (T[i]<min) // Αν βρεις μικρότερο απ'το ελάχιστο κρατάς τη θέση και την τιμή του
  {
    min=T[i];
    index=i;
  }
}
printf("To mikrotero stoixeio tou pinaka T einai to %d sti thesi %d\n",min,index);
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

vassilis498

Διακεκριμένο μέλος

Ο vassilis498 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 7,079 μηνύματα.
αναδρομικά λέει η άσκηση. Το πιο απλό που μπορώ να σκεφτώ είναι σπας τον πίνακα στα 2 και σε κάθε κλήση απλά υποδιπλασιάζεις το μέγεθος των 2 υποπινάκων, μέχρι να συγκρίνεις 2 αριθμούς. Αλλά δε ξέρω κατά πόσο έχει νόημα να του το δώσουμε έτοιμο εφόσον ζητά μόνο βοήθεια.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Guest 209912

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Ποοο ούτε καν είδα το αναδρομικά, αναδρομικά γίνεται εύκολα και με static μεταβλητές, με κάθε κλίση αυξάνεις το i κατά ένα και κάνεις το ίδιο
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Guest 209912

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Code:
int minimum (int T[], int  *elaxisto , int  *thesi,int  n) 

{
   static int i=1;
   if (T[i]<*elaxisto)
  {
   *elaxisto = T[i];
   *thesi = i; 
  }
  if (i==n-1)
  {
   return();
  }
  else
  {
    i++;
   minimum(T[],elaxisto,thesi,n);
  }
  return();
}

Η Συνάρτησή σου δέχεται 4 ορίσματα τον πίνακα Τ, τις θέσεις του πίνακα (n), και τις διευθύνσεις μνήμης των μεταβλητών elaxisto και thesi. Θέλεις τις διευθύνσεις τους και όχι τις ίδιες τις μεταβλητές για να μπορείς να τις αλλάξεις μέσα στη συνάρτηση (μπορείς επίσης να κάνεις και αναφορική κλήση στις μεταβλητές αυτές (call by reference) αν δε θες να χρησιμοποιήσεις δείκτες αλλά είναι στην ουσία το ίδιο πράγμα . Το i το δηλώνεις ως static έτσι όταν καλείς νέα συνάρτηση αυτό δεν χάνει την αξία του και μπορείς να το κάνεις ++. Αν δεν θες να χρησιμοποιήσεις static, θα πρέπει να περνάς το i στη συνάρτηση κάθε φορά που την καλείς ως παράγοντα.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
αναδρομικά λέει η άσκηση. Το πιο απλό που μπορώ να σκεφτώ είναι σπας τον πίνακα στα 2 και σε κάθε κλήση απλά υποδιπλασιάζεις το μέγεθος των 2 υποπινάκων, μέχρι να συγκρίνεις 2 αριθμούς. Αλλά δε ξέρω κατά πόσο έχει νόημα να του το δώσουμε έτοιμο εφόσον ζητά μόνο βοήθεια.
αυτο πιστευω θα ηταν πιο αποδοτικο αν ηταν ταξινομημενος
Ποοο ούτε καν είδα το αναδρομικά, αναδρομικά γίνεται εύκολα και με static μεταβλητές, με κάθε κλίση αυξάνεις το i κατά ένα και κάνεις το ίδιο
εχω την εντυπωση οτι βγαινει και χωρις static. το λεω γιατι το παιδι μπορει να μην εχει ιδεα τι ειναι το static... Αλλα ας παραθεσει τη προσπαθεια του να τον βοηθησουμε οσο μπορουμε...
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Την αναδρομή ως έννοια και ως θεωρία την έχω καταλάβει...Απλώς δεν μπορώ να καταλάβω πως την γράφουμε σε κώδικα..Εγώ έγραψα κάτι το οποίο είναι λάθος...Αν θέλετε το στέλνω..
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
ανεβασε τον κωδικα σοου βαζοντας τον μεσα σε καταλληλο tag (
Code:
κωδικας[προσεχε αυτο->/code])
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Code:
#include <stdio.h>
#include "simpio.h"
#include "genlib.h"

#define n 50

double min(double T[], int m,int *index);

int main(void)
{
    double T[n];
    double a; 
    int m;
    int index; 
    int i;

    printf("Poses theseis apo ton pinaka na desmeutoun? ");
    scanf("%d", &m);

    printf("Dwse ta stoixeia tou pinaka T \n");

    for(i=0;i<m;i++)
    {

        scanf("%d",T[i]);
    }

    a = min(T,m,&index);

    printf("To elaxisto einai to %ld kai vrisketai sthn %dh thesh",a,index);
    system("pause");
}

double min(double T[],int m,int *index)
{
    double a;
    int i;


    for(i=0;i<m;i++)
    {
        if(i=0)
        {
            a = T[i];
            *index = i;
        }
        else
        {
            if(a < T[i])
            {
                a = min(T, m, index);
            }
        }
     }
    return a;
}

Το πρόβλημα το έχω στην συνάρτηση min(double T[],int m,int *index)... Δεν ξέρω πως να την κάνω με αναδρομή..
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
Code:
#include <stdio.h>
#include "simpio.h"
#include "genlib.h"

#define n 50

double min(double T[], int m,int *index);

int main(void)
{
    double T[n];
    double a; 
    int m;
    int index; 
    int i;

    printf("Poses theseis apo ton pinaka na desmeutoun? ");
    scanf("%d", &m);

    printf("Dwse ta stoixeia tou pinaka T \n");

    for(i=0;i<m;i++)
    {

        scanf("%d",T[i]);
    }

    a = min(T,m,&index);

    printf("To elaxisto einai to %ld kai vrisketai sthn %dh thesh",a,index);
    system("pause");
}

double min(double T[],int m,int *index)
{
    double a;
    int i;


    for(i=0;i<m;i++)
    {
        if(i=0)
        {
            a = T[i];
            *index = i;
        }
        else
        {
            if(a < T[i])
            {
                a = min(T, m, index);
            }
        }
     }
    return a;
}
Το πρόβλημα το έχω στην συνάρτηση min(double T[],int m,int *index)... Δεν ξέρω πως να την κάνω με αναδρομή..

αρχικα, φτιαχνω το κωδικα σου για να μπορει να διαβαζεται :)
και πριν μπουμε στα του κωδικα σου και δεδομενου οτι εχεις κατανοησει την εννοια της αναδρομης. Για ποιο λογο καλεις ξανα την min μεσα στο body της min ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Guest 209912

Επισκέπτης

αυτή τη στιγμή δεν είναι συνδεδεμέν. Δεν έχει γράψει κανένα μήνυμα.
Την αναδρομή ως έννοια και ως θεωρία την έχω καταλάβει...Απλώς δεν μπορώ να καταλάβω πως την γράφουμε σε κώδικα..Εγώ έγραψα κάτι το οποίο είναι λάθος...Αν θέλετε το στέλνω..

Στην ουσία όταν χρησιμοποιείς αναδρομή θες η κάθε κλήση της συνάρτησης να αντιπροσωπεύει και ένα στάδιο μιας επανάληψης.

Δηλαδή αν θες για παράδειγμα να αντικαταστήσεις μια for με αναδρομή, κάθε κλήση της αναδρομικής συνάρτησης θα είναι και μια επανάληψη της for, άρα σε κάθε κλήση το i θα είναι διαφορετικό. Στο σώμα της συνάρτησης έχεις ότι έχεις και στο σώμα της for καθώς και μια εντολή που ξ ανακαλεί την ίδια τη συνάρτηση καθώς και μια συνθήκη που θα τερματίσει τη στοίβα των συναρτήσεων.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Αναδρομικός αλγόριθμος δεν είναι αυτός που περιέχει τουλάχιστον μια κλήση του εαυτού του;
Γι αυτό...λογικά είναι λάθος, αλλά δεν κατάλαβα πως γίνεται
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
Σωστα, γενικοτερα η φιοσοφια της αναδρομης ειναι να σπας ενα προβλημα σε υποκομματια, αρα η κληση της min μεσα στη συναρτηση soy θα πρεπει να χρησιμοποιειται για να αντιμετωπισει το ενα υποπροβλημα.

Παμε στο επομενο ζητημα. Σκεψου οτι αν μια συναρτηση καλει τον εαυτο της επ απειρον απλα το προγραμμα σου θα τρεχει μεχρι να crashαρει. Αρα χρειαζεσαι μια συνθηκη τερματισμου η οποια θα λεει "δε μπορω να σπασω το προβλημα σε αλλο μικροτερο υποπροβλημα, γυρνα πισω". Εσυ ποια συνθηκη εχεις στον κωδικα σου που να αποτρεπει το προγραμμα να τρεχει για παντα ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Μέχρι να βρεθεί το ελάχιστο..Δηλαδή μέχρι να μην ισχύει το if(a < T)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
Αν το T[1] ειναι το μοναδικο στοιχειο το οποιο ειναι μεγαλυτερο του T[0] ποτε θα τελειωσει να τρεχει το προγραμμα ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

1993giannis

Νεοφερμένος

Ο 1993giannis αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 9 μηνύματα.
Εεε ποτέ ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

g1wrg0s

Επιφανές μέλος

Ο 01001 αυτή τη στιγμή δεν είναι συνδεδεμένος. Επαγγέλεται Φοιτητής/τρια. Έχει γράψει 9,074 μηνύματα.
Το ετρεξες ή μονο σε χαρτι το κανεις ;
Η κληση min ποιο υποπροβλημα καλειται να λυσει ; Για ποιο λογο θες να τη καλεις ;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 10 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 2 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top