DOMANDA Un esercizio sui numeri complessi in C

Pubblicità

VidRam

Utente Èlite
Messaggi
1,880
Reazioni
342
Punteggio
107
Raga devo progettare/risolvere questo esercizio, avrei anche delle idee ma fino ad ora non funziona niente di niente...

Esercizio 2: Il tipo di dato complesso
Sviluppare un programma strutturato in function che, definita una struttura opportuna per
il tipo di dato complesso, consenta la possibilità di:
• Sommare numeri complessi;
• Moltiplicare numeri complessi
• Calcolare il modulo di un numero complesso
• Estrarre la parte reale
• Estrarre la parte Immaginaria

Qualche idea?

Se vi volete divertire c'è anche un terzo esercizio che vallo a capire come metterlo :
Esercizio 3: GPS
Un sistema GPS calcola e memorizza in un array una serie di coordinate geografiche.
Avendo definito i seguenti tipi strutturati:
C:
typedef struct
{
unsigned int gradi;
unsigned int minuti;
unsigned int secondi;
unsigned int frazSecondi;
} Coordinata;
typedef struct
{
Coordinata latitudine;
Coordinata longitudine;
float altitudine;
float distanzaPercorsa;
char unitaMisuraDistanza[2];
} Punto;
Sviluppare una function di tipo main che simuli una passeggiata di 10 tappe al fine di
memorizzare le differenti coordinate geografiche.
Si provi a strutturare il programma con delle function
 
Ultima modifica da un moderatore:
Mostra ciò che hai realizzato sino ad ora, anche se non funziona. Esponi magari le tue idee anche, così che ti si possa mettere sulla strada giusta.

Il numero 2, non mi sembra particolarmente complesso. La struttura l'hai realizzata? Le funzioni le hai definite?

Per quanto riguarda il 3, avrai un array di 10 elementi (le tappe, i Punti) dai quali passerai; quindi per ciascuno avrai un Punto che al suo interno contiene due Coordinate più gli altri dati.
 
Raga devo progettare/risolvere questo esercizio, avrei anche delle idee ma fino ad ora non funziona niente di niente...

Esercizio 2: Il tipo di dato complesso
Sviluppare un programma strutturato in function che, definita una struttura opportuna per
il tipo di dato complesso, consenta la possibilità di:
• Sommare numeri complessi;
• Moltiplicare numeri complessi
• Calcolare il modulo di un numero complesso
• Estrarre la parte reale
• Estrarre la parte Immaginaria

Qualche idea?

Se vi volete divertire c'è anche un terzo esercizio che vallo a capire come metterlo :
Esercizio 3: GPS
Un sistema GPS calcola e memorizza in un array una serie di coordinate geografiche.
Avendo definito i seguenti tipi strutturati:
typedef struct
{
unsigned int gradi;
unsigned int minuti;
unsigned int secondi;
unsigned int frazSecondi;
} Coordinata;
typedef struct
{
Coordinata latitudine;
Coordinata longitudine;
float altitudine;
float distanzaPercorsa;
char unitaMisuraDistanza[2];
} Punto;
Sviluppare una function di tipo main che simuli una passeggiata di 10 tappe al fine di
memorizzare le differenti coordinate geografiche.
Si provi a strutturare il programma con delle function

Nel corso dello studio del linguaggio C avrai senz'altro avuto a che fare con le "strutture", che ricordano un po' i "vecchi" concetti di "record", di "campo" e di "tracciato del record" :asd:
Ecco, devi definire un nuovo tipo di dato con typedef e struct, ad esempio:
typedef struct Complex
{
float Reale;
float Immaginario;
};
A questo punto devi definire le variabili, ad esempio:
struct Complex a, j;
Poi all'interno dell'algoritmo i campi vengono indicati con l'identificatore della variabile e con l'identificatore del campo, separati da un punto:
a.Reale=j.Reale (ad es. in una istruzione di assegnazione) :sisi:
Infine dichiarerai l'insieme delle funzioni che svolgeranno le operazioni richieste ;)
 
Allora:
1) non hai usato il tag CODE
2) non hai messo i tuoi tentativi

Se a breve non provvedi il topic verra' chiuso.
Perchè c'è bisogno del tag code? Non siamo già in una sezione coding? :/
Comunque si, oggi li posto e per rispondervi abbiamo fatto le strutture proprio prima di questo "assegno", che serve ad esercitarcisi sopra.
 
Il tag code consente una formattazione del codice rendendolo più leggibile. Qualche tempo fa è stata introdotta anche la possibilità di specificare un linguaggio. Leggi qui.

Restiamo in attesa di tuoi ulteriori interventi allora. ;)
 
Aspetto ancora un po'.
Raga grazie, ho avuto problemi di connessione...
Ho fatto il 3 così
Codice:
#include <stdio.h>  /*srand e rand*/
#include <stdlib.h>
#include <time.h>   /*time per srand*/
#include <string.h> /*strcpy*/
#include <math.h> /*sqrt*/

/*Definizione struttura coordinata*/
typedef struct
{
unsigned int gradi;
unsigned int minuti;
unsigned int secondi;
unsigned int frazSecondi;
} Coordinata;

/*Definizione struttura punto del gps*/
typedef struct
{
Coordinata latitudine;
Coordinata longitudine;
float altitudine;
float distanzaPercorsa;
char unitaMisuraDistanza[2];
} Punto;

int main()
{
    /*Dichiarazione array di 10 punti*/
    Punto passeggiata[10];

        srand(time(NULL));

    /*Settaggio casuale del punto iniziale*/
    /*Inizializzazione coordinate latitudine*/
        passeggiata[0].latitudine.frazSecondi=(unsigned int)rand()%999;
        passeggiata[0].latitudine.secondi=(unsigned int)rand()%61;
        passeggiata[0].latitudine.minuti=(unsigned int)rand()%61;
        passeggiata[0].latitudine.gradi=(unsigned int)rand()%90;

    /*Inizializzaione coordinate longitudine*/
        passeggiata[0].longitudine.frazSecondi=(unsigned int)rand()%999;
        passeggiata[0].longitudine.secondi=(unsigned int)rand()%61;
        passeggiata[0].longitudine.minuti=(unsigned int)rand()%61;
        passeggiata[0].longitudine.gradi=(unsigned int)rand()%180;

    /*Inizializzazione di altezza,contatore distanza percorsa
        e dell'unita' di misura scelta (che saranno metri
        poiche' sara' simulata una passeggiata a piedi*/
        passeggiata[0].altitudine=(int)rand()%800-1;

        passeggiata[0].distanzaPercorsa=0;

        strcpy(passeggiata[0].unitaMisuraDistanza,"m");

    /*Calcolo dei punti successivi*/
    /*Latitudine e longitudine sono calcolati casualmente
    da valori stimati percorribili a piedi (quindi gradi
    e primi saranno pressoche' identici), altezza
    (rimasta costante), la distanza e' calcolata dalla
    formula sulle cordinate (precisamente sui secondi
    essendo quelli piu' incisivi sul calcolo*/
        for (int i=1;i<10;i++)
        {
        /*Latitudine*/
            passeggiata[i].latitudine.minuti=
            passeggiata[i-1].latitudine.minuti;
            passeggiata[i].latitudine.gradi=
            passeggiata[i-1].latitudine.gradi;
            passeggiata[i].latitudine.frazSecondi=
            passeggiata[i-1].latitudine.frazSecondi+(unsigned int)rand()%999;
            passeggiata[i].latitudine.secondi=
            passeggiata[i-1].latitudine.secondi+(unsigned int)rand()%45;

        /*Longitudine*/
            passeggiata[i].longitudine.minuti=
            passeggiata[i-1].longitudine.minuti;
            passeggiata[i].longitudine.gradi=
            passeggiata[i-1].longitudine.gradi;
            passeggiata[i].longitudine.frazSecondi=
            passeggiata[i-1].longitudine.frazSecondi+(unsigned int)rand()%999;
            passeggiata[i].longitudine.secondi=
            passeggiata[i-1].longitudine.secondi+(unsigned int)rand()%45;

        /*Altitudine*/
            passeggiata[i].altitudine=passeggiata[i-1].altitudine;

        /*Calcolo distanza*/
        /*Si e' fatto uso delle funzioni pow(potenza) e
        sqrt(radice quadrata)per facilitare la scrittura*/
        /*Dis=rad((lat2^2-lat1^2)+(lon2^2-lon1^2))*/
            passeggiata[i].distanzaPercorsa=
            passeggiata[i-1].distanzaPercorsa+
            (float)sqrt((float)pow((passeggiata[i].latitudine.secondi-
                                  passeggiata[i-1].latitudine.secondi),2)+
                        (float)pow((passeggiata[i].longitudine.secondi-
                                  passeggiata[i-1].longitudine.secondi),2));

            strcpy(passeggiata[i].unitaMisuraDistanza,"m");
        }

    /*Stampa a schermo dei dieci punti con il calcolo
    della distanza*/
        printf("## GPS ##\n");
        for (int i=0;i<10;i++)
        {
            /*Latitudine*/
            printf("\n-Posizione N: %d-\n", i+1);
            printf("Latitudine: %d°%d'%d.%d''\n",
            passeggiata[i].latitudine.gradi,
            passeggiata[i].latitudine.minuti,
            passeggiata[i].latitudine.secondi,
            passeggiata[i].latitudine.frazSecondi);

            /*Longitudine*/
            printf("Longitudine: %d°%d'%d.%d''\n",
            passeggiata[i].longitudine.gradi,
            passeggiata[i].longitudine.minuti,
            passeggiata[i].longitudine.secondi,
            passeggiata[i].longitudine.frazSecondi);

            /*Altitudine*/
            printf("Altezza: %f\n",
            passeggiata[i].altitudine);

            /*Distanza percorsa*/
            printf("Distanza percorsa: %f%s\n",
            passeggiata[i].distanzaPercorsa,
            passeggiata[i].unitaMisuraDistanza);
        }

    return 0;
}
 
Raga grazie, ho avuto problemi di connessione...
Ho fatto il 3 così
Codice:
#include <stdio.h>  /*srand e rand*/
#include <stdlib.h>
#include <time.h>   /*time per srand*/
#include <string.h> /*strcpy*/
#include <math.h> /*sqrt*/

/*Definizione struttura coordinata*/
typedef struct
{
unsigned int gradi;
unsigned int minuti;
unsigned int secondi;
unsigned int frazSecondi;
} Coordinata;

/*Definizione struttura punto del gps*/
typedef struct
{
Coordinata latitudine;
Coordinata longitudine;
float altitudine;
float distanzaPercorsa;
char unitaMisuraDistanza[2];
} Punto;

int main()
{
    /*Dichiarazione array di 10 punti*/
    Punto passeggiata[10];

        srand(time(NULL));

    /*Settaggio casuale del punto iniziale*/
    /*Inizializzazione coordinate latitudine*/
        passeggiata[0].latitudine.frazSecondi=(unsigned int)rand()%999;
        passeggiata[0].latitudine.secondi=(unsigned int)rand()%61;
        passeggiata[0].latitudine.minuti=(unsigned int)rand()%61;
        passeggiata[0].latitudine.gradi=(unsigned int)rand()%90;

    /*Inizializzaione coordinate longitudine*/
        passeggiata[0].longitudine.frazSecondi=(unsigned int)rand()%999;
        passeggiata[0].longitudine.secondi=(unsigned int)rand()%61;
        passeggiata[0].longitudine.minuti=(unsigned int)rand()%61;
        passeggiata[0].longitudine.gradi=(unsigned int)rand()%180;

    /*Inizializzazione di altezza,contatore distanza percorsa
        e dell'unita' di misura scelta (che saranno metri
        poiche' sara' simulata una passeggiata a piedi*/
        passeggiata[0].altitudine=(int)rand()%800-1;

        passeggiata[0].distanzaPercorsa=0;

        strcpy(passeggiata[0].unitaMisuraDistanza,"m");

    /*Calcolo dei punti successivi*/
    /*Latitudine e longitudine sono calcolati casualmente
    da valori stimati percorribili a piedi (quindi gradi
    e primi saranno pressoche' identici), altezza
    (rimasta costante), la distanza e' calcolata dalla
    formula sulle cordinate (precisamente sui secondi
    essendo quelli piu' incisivi sul calcolo*/
        for (int i=1;i<10;i++)
        {
        /*Latitudine*/
            passeggiata[i].latitudine.minuti=
            passeggiata[i-1].latitudine.minuti;
            passeggiata[i].latitudine.gradi=
            passeggiata[i-1].latitudine.gradi;
            passeggiata[i].latitudine.frazSecondi=
            passeggiata[i-1].latitudine.frazSecondi+(unsigned int)rand()%999;
            passeggiata[i].latitudine.secondi=
            passeggiata[i-1].latitudine.secondi+(unsigned int)rand()%45;

        /*Longitudine*/
            passeggiata[i].longitudine.minuti=
            passeggiata[i-1].longitudine.minuti;
            passeggiata[i].longitudine.gradi=
            passeggiata[i-1].longitudine.gradi;
            passeggiata[i].longitudine.frazSecondi=
            passeggiata[i-1].longitudine.frazSecondi+(unsigned int)rand()%999;
            passeggiata[i].longitudine.secondi=
            passeggiata[i-1].longitudine.secondi+(unsigned int)rand()%45;

        /*Altitudine*/
            passeggiata[i].altitudine=passeggiata[i-1].altitudine;

        /*Calcolo distanza*/
        /*Si e' fatto uso delle funzioni pow(potenza) e
        sqrt(radice quadrata)per facilitare la scrittura*/
        /*Dis=rad((lat2^2-lat1^2)+(lon2^2-lon1^2))*/
            passeggiata[i].distanzaPercorsa=
            passeggiata[i-1].distanzaPercorsa+
            (float)sqrt((float)pow((passeggiata[i].latitudine.secondi-
                                  passeggiata[i-1].latitudine.secondi),2)+
                        (float)pow((passeggiata[i].longitudine.secondi-
                                  passeggiata[i-1].longitudine.secondi),2));

            strcpy(passeggiata[i].unitaMisuraDistanza,"m");
        }

    /*Stampa a schermo dei dieci punti con il calcolo
    della distanza*/
        printf("## GPS ##\n");
        for (int i=0;i<10;i++)
        {
            /*Latitudine*/
            printf("\n-Posizione N: %d-\n", i+1);
            printf("Latitudine: %d°%d'%d.%d''\n",
            passeggiata[i].latitudine.gradi,
            passeggiata[i].latitudine.minuti,
            passeggiata[i].latitudine.secondi,
            passeggiata[i].latitudine.frazSecondi);

            /*Longitudine*/
            printf("Longitudine: %d°%d'%d.%d''\n",
            passeggiata[i].longitudine.gradi,
            passeggiata[i].longitudine.minuti,
            passeggiata[i].longitudine.secondi,
            passeggiata[i].longitudine.frazSecondi);

            /*Altitudine*/
            printf("Altezza: %f\n",
            passeggiata[i].altitudine);

            /*Distanza percorsa*/
            printf("Distanza percorsa: %f%s\n",
            passeggiata[i].distanzaPercorsa,
            passeggiata[i].unitaMisuraDistanza);
        }

    return 0;
}

Per il secondo è un casino assurdo, ho fatto un header e un file function da richiamare poi in un main, non so proprio come passarvelo qui, ma funziona!
Che ne pensate del gps? Miglioramenti? (Funziona ;) ).
Il mio problema è che le strutture non mi sono ancora chiarissime e per fare questi esercizi ci metto anche troppo tempo...
 
Per il secondo è un casino assurdo, ho fatto un header e un file function da richiamare poi in un main, non so proprio come passarvelo qui, ma funziona!
Che ne pensate del gps? Miglioramenti? (Funziona ;) ).
Il mio problema è che le strutture non mi sono ancora chiarissime e per fare questi esercizi ci metto anche troppo tempo...
solo un piccolo suggerimento, che ti sará sicuramente molto utile ad evitare di fare qualche errore di digitazione e nel frattempo a rendere molto piú comprensibile il codice, scrivi le strutture in questo modo:
Codice:
typedef struct coordinata {
    unsigned int gradi, minuti, secondi, frazSecondi;
    struct coordinata *nextPtr;
} coordinata;

typedef coordinata* CoordPtr;
aggiungendo il typedef in fondo renderai il codice estremamente piú leggero, a tutte le funzioni puoi passargli il puntatore e usare l'operatore freccia all'interno della funzione per scrivere nella lista linkata.
Ah edit, si dimenticavo di dire che piuttosto che usare un array mi sparerei... la lista linkata é di gran lunga molto piú comoda. :asd: Il codice che ti ho scritto é la dichiarazione di una lista linkata
 
solo un piccolo suggerimento, che ti sará sicuramente molto utile ad evitare di fare qualche errore di digitazione e nel frattempo a rendere molto piú comprensibile il codice, scrivi le strutture in questo modo:
Codice:
typedef struct coordinata {
    unsigned int gradi, minuti, secondi, frazSecondi;
    struct coordinata *nextPtr;
} coordinata;

typedef coordinata* CoordPtr;
aggiungendo il typedef in fondo renderai il codice estremamente piú leggero, a tutte le funzioni puoi passargli il puntatore e usare l'operatore freccia all'interno della funzione per scrivere nella lista linkata.
Ah edit, si dimenticavo di dire che piuttosto che usare un array mi sparerei... la lista linkata é di gran lunga molto piú comoda. :asd: Il codice che ti ho scritto é la dichiarazione di una lista linkata
Wei grazie, farò così e spero di prenderci l'abitudine
 
Pubblicità
Pubblicità
Indietro
Top