Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] 1 problema iterativo e 1 ricorsivo

    Mi serve un algoritmo in c x questi problemi:

    Ricorsivo:

    Trovare un algoritmo ricorsivo che controlli se due naturali sono primi tra loro, vale a dire non hanno divisori primi in comune maggiori di 1. Si discuta caso base, caso ricorsivo e terminazione della ricorsione.

    Iterativo:

    Si disegni un algoritmo iterativo che ordini un vettore di interi posizionando prima tutti gli interi pari in ordine crescente, e quindi tutti gli interi dispari in ordine decrescente. Si discuta l'idea, mostrando le variabili coinvolte nei cicli, la loro inizializzazione, le condizioni di terminazione e la verifica della terminazione.


    Se qualcuno ha un po di tempo mi faccia sapere :-)

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    Boh, io c'ho provato a risolverti il secondo problema, certo che non posso assicurarti che sia ottimizzato. Però pare funzioni...
    Ah, funziona su un vettore di 10 interi, non saprei come renderlo parametrico... forse sizeof(NomeVettore)/sizeof(int)???

    codice:
    void swap(int * const Ptr, int * const Ptr2);
    int Conta (int * const Ptr);
    
    int main(){
    
    int Vettore[10]={42,35,24,14,22,41,76,47,2,97};
    int i,j,y,z;
    
    for (i=0; i<=8; i++)
       for (j=0; j<=8; j++)
          if((Vettore[j]%2) > (Vettore[j+1]%2))
             swap(&Vettore[j], &Vettore[j+1]);
    
    for (y=0; y<=8; y++)
       for (i=0; i<=8; i++)
          if (Vettore[i+1]%2!=0){
             i++;
             break;}
          else
             if(Vettore[i]>Vettore[i+1])
                swap(&Vettore[i], &Vettore[i+1]);
    
    for (z=1; z<=8; z++)
       for (j=i; j<=8; j++)
          if(Vettore[j]<Vettore[j+1])
             swap(&Vettore[j], &Vettore[j+1]);
    
    for(i=0; i<=9; i++)
       printf("%d ", Vettore[i]);
    
    return 0;
    }
    
    
    void swap(int * const Ptr1, int * const Ptr2){
    int temp;
       temp=*Ptr2;
       *Ptr2=*Ptr1;
       *Ptr1=temp;   
    }

  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    Eccolo parametrico...

    codice:
    #include <stdio.h>
    #include <string.h>
    
    void swap(int * const Ptr, int * const Ptr2);
    int Conta (int * const Ptr);
    
    int main(){
    
    int Vettore[]={42,35,24,14,22,76,47,2,97,66,11,43};
    int i,j,y,z;
    
    for (i=0; i<=sizeof(Vettore)/sizeof(int)-2; i++)
       for (j=0; j<sizeof(Vettore)/sizeof(int)-2; j++)
          if((Vettore[j]%2) > (Vettore[j+1]%2))
             swap(&Vettore[j], &Vettore[j+1]);
    
    for (y=0; y<sizeof(Vettore)/sizeof(int)-2; y++)
       for (i=0; i<sizeof(Vettore)/sizeof(int)-2; i++)
          if (Vettore[i+1]%2!=0){
             i++;
             break;
          }
          else
             if(Vettore[i]>Vettore[i+1])
                swap(&Vettore[i], &Vettore[i+1]);
    
    for (z=1; z<=sizeof(Vettore)/sizeof(int)-2; z++)
       for (j=i; j<=sizeof(Vettore)/sizeof(int)-2; j++)
          if(Vettore[j]<Vettore[j+1])
             swap(&Vettore[j], &Vettore[j+1]);
    
    for(i=0; i<=sizeof(Vettore)/sizeof(int)-1; i++)
       printf("%d ", Vettore[i]);
    
    return 0;
    }
    
    
    void swap(int * const Ptr1, int * const Ptr2){
    int temp;
       temp=*Ptr2;
       *Ptr2=*Ptr1;
       *Ptr1=temp;   
    }

  4. #4

    Re: [C] 1 problema iterativo e 1 ricorsivo

    Originariamente inviato da Dario86ostia
    Mi serve un algoritmo in c x questi problemi:

    Ricorsivo:

    Trovare un algoritmo ricorsivo che controlli se due naturali sono primi tra loro, vale a dire non hanno divisori primi in comune maggiori di 1. Si discuta caso base, caso ricorsivo e terminazione della ricorsione.
    Questo è un esercizio per trovare il MCD che ho fatto da poco:
    codice:
    #include <stdio.h>
    
    int gcd (int, int);
    
    int main()
    {
        int n1, n2;
        
        printf ("Inserisci due numeri interi: ");
        scanf ("%d %d", &n1, &n2);
        
        printf ("Il MCD di %d e %d sara' %d\n", n1, n2, gcd (n1, n2));
        
        system ("pause");
        
        return 0;
    }
    int gcd (int x, int y)
    {
        if (y == 0){
              return x;}
        else{
              return gcd (y, x % y);}
    }
    funziona, ma magari lo modifichi leggermente tu, perchè io adesso me ne vado a letto

  5. #5
    Grazie a tutti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.