[C] Programma da linea di comando
Ciao a tutti!
Vorrei chiedere per caso il mio programma funziona. Devo svolgere un esercizio con inserimento dei dati da linea di comando ma non so se funzionale, in quanto il compilatore non mi dà errori, ma, purtroppo, non so farlo partire da linea di comando. Potreste, cortesemente, darci un'occhiata e dirmi se funziona?
Grazie!
il testo dell'esercizio è il seguente:
Scrivere un programma che permetta di memorizzare un insieme di coordinate del piano cartesiano.
Il programma deve acquisire da tastiera in due vettori paralleli le coordinate x e y di 4 punti, corrispondenti ai punti toccati da un percorso e manipolare i dati ricevuti in base ad un parametro ricevuto da linea di comando:
Parametro “–m” : calcola e stampa a video la lunghezza del percorso
composto dai 4 segmenti.
Parametro “–a” : calcola e stampa a video la distanza minima tra le
coordinate inserite.
Il codice del mio esercizio è il seguente:
Vorrei chiedere per caso il mio programma funziona. Devo svolgere un esercizio con inserimento dei dati da linea di comando ma non so se funzionale, in quanto il compilatore non mi dà errori, ma, purtroppo, non so farlo partire da linea di comando. Potreste, cortesemente, darci un'occhiata e dirmi se funziona?
Grazie!
il testo dell'esercizio è il seguente:
Scrivere un programma che permetta di memorizzare un insieme di coordinate del piano cartesiano.
Il programma deve acquisire da tastiera in due vettori paralleli le coordinate x e y di 4 punti, corrispondenti ai punti toccati da un percorso e manipolare i dati ricevuti in base ad un parametro ricevuto da linea di comando:
Parametro “–m” : calcola e stampa a video la lunghezza del percorso
composto dai 4 segmenti.
Parametro “–a” : calcola e stampa a video la distanza minima tra le
coordinate inserite.
Il codice del mio esercizio è il seguente:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define DIM 4 int main(int argc, char* argv[]) { int x[DIM], y[DIM]; int i=0; int min=-1; float s1=0,s2=0,s3=0,s4=0; float diffx,diffy; float ris1,ris2,ris3,ris4; float distanzatot=0; char ch; //CONTROLLO INSERIMENTO DA LINEA DI COMANDO if(argc != 1) { printf("Errore: numero di argomenti non valido!"); return -1; } //INSERIMENTO COORDINATE DA TASTIERA while(i<4) { printf("Inserire coordinate x,y di un punto: "); scanf("%d %d",&x[i],&y[i]); i++; } if(argv[1] != NULL) ch = argv[1][0]; switch (ch) { case 'm': //CALCOLO DISTANZA DEL PRIMO SEGMENTO diffx = x[1] - x[0]; diffy = y[1] - y[0]; s1 = pow(diffx,2) + pow(diffy,2); ris1 = sqrt(s1); //CALCOLO DISTANZA SECONDO SEGMENTO diffx = x[2] - x[1]; diffy = y[2] - y[1]; s2 = pow(diffx,2) + pow(diffy,2); ris2 = sqrt(s1); //CALCOLO DISTANZA TERZO SEGMENTO diffx = x[3] - x[2]; diffy = y[3] - y[2]; s3 = pow(diffx,2) + pow(diffy,2); ris3 = sqrt(s1); //CALCOLO DISTANZA QUARTO SEGMENTO (RICONGIUNGENTE IL PRIMO E IL TERZO) diffx = x[3] - x[0]; diffy = y[3] - y[0]; s4 = pow(diffx,2) + pow(diffy,2); ris4 = sqrt(s1); distanzatot = ris1 + ris2 + ris3 + ris4; printf("La distanza totale dei tre punti e': %f",distanzatot); break; case 'a': //CALCOLO DISTANZA DEL PRIMO SEGMENTO diffx = x[1] - x[0]; diffy = y[1] - y[0]; s1 = pow(diffx,2) + pow(diffy,2); ris1 = sqrt(s1); //CALCOLO DISTANZA SECONDO SEGMENTO diffx = x[2] - x[1]; diffy = y[2] - y[1]; s2 = pow(diffx,2) + pow(diffy,2); ris2 = sqrt(s1); //CALCOLO DISTANZA TERZO SEGMENTO diffx = x[3] - x[2]; diffy = y[3] - y[2]; s3 = pow(diffx,2) + pow(diffy,2); ris3 = sqrt(s1); //CALCOLO DISTANZA QUARTO SEGMENTO (RICONGIUNGENTE IL PRIMO E IL TERZO) diffx = x[3] - x[0]; diffy = y[3] - y[0]; s4 = pow(diffx,2) + pow(diffy,2); ris4 = sqrt(s1); //DETERMINAZIONE DEL SEGMENTO CON DISTANZA MINIMA if(ris1<ris2 && ris1<ris3 && ris1<ris4) min=ris1; if(ris2<ris1 && ris2<ris3 && ris2<ris4) min=ris2; if(ris3<ris1 && ris3<ris2 && ris3<ris4) min=ris3; if(ris4<ris1 && ris4<ris2 && ris4<ris3) min=ris4; printf("La distanza minima tra le coordinate inserite e': %d",min); break; } return 0; }
Risposte
Come cercavo di dirti nell'altra tua recente discussione, quando chiedi aiuto su un pezzo di codice è sempre buona cosa scrivere anche quale risultato viene prodotto dal codice e in che modo è diverso da quello atteso.
Per questo caso specifico può esserti utile sapere che il nome del programma viene sempre passato come primo elemento di [inline]argv[/inline], e quindi un comando come [inline]./prog[/inline] avrà, senza opzioni aggiuntive, [inline]argc == 1[/inline].
Per questo caso specifico può esserti utile sapere che il nome del programma viene sempre passato come primo elemento di [inline]argv[/inline], e quindi un comando come [inline]./prog[/inline] avrà, senza opzioni aggiuntive, [inline]argc == 1[/inline].