ho avuto un problema con un programma e non so cosa fare arrivati a questo punto
dato un file txt dove all'interno abbiamo un numero qualsiasi per riga , copi l'intero contenuto in una lista
e da riga di comando ./nomeprogramma numeri.txt 4 mi deve ritornare il quarto elemento arrotondato con la funzione Round della libreria Math
file
2
3
45
1.5
ecco il codice spero che mi possate aiutare in qualche modo grazie
dato un file txt dove all'interno abbiamo un numero qualsiasi per riga , copi l'intero contenuto in una lista
e da riga di comando ./nomeprogramma numeri.txt 4 mi deve ritornare il quarto elemento arrotondato con la funzione Round della libreria Math
file
2
3
45
1.5
ecco il codice spero che mi possate aiutare in qualche modo grazie
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
struct listinfo
{
double elem;
int pos;
struct listinfo *prox;
};
typedef struct listinfo lista;
//Prototipi di funzione//
lista* inizializza(lista *pointer);
//lista* inserisci(lista *pointer,int elemento);
lista* inseriscicoda(lista *pointer,double elemento);
lista* carica(lista *pointer,char *nomefile);
lista* ordina(lista *pointer);
lista* RitornaPosizione(lista*pointer,int argv2);
//void stampa(lista *pointer);
//double stampaelemento(lista *pointer,int argv2);
int main(int argc ,char *argv[])
{
int i;
double ris;
//puntatore a lista
lista *lista1;
int argv2;
char*nomefile = argv[1];
//converto il valore da tastiera stringa in intero
argv2 = atoi(argv[2]);
//inizializza la lista vuota//
lista1 = inizializza(lista1);
lista1 = carica(lista1,nomefile);
lista1=ordina(lista1);
lista1 = RitornaPosizione(lista1,argv2);
ris=lista1->elem;
printf("l'elemento desiderato e' %lf\n",ris);
return round(ris);
}
/*
for(i=1;i<argc;i++)
{
while(lista1!=NULL)
{
if(argv==lista->elem)
{
return round(i);
}
else
{
lista1=lista1->prox;
return round(i);
}
}
}
*/
/*void stampalista(lista *pointer,int val)
{
while(pointer!=NULL)
{
printf("%lf ",pointer->elem);
pointer=pointer->prox;
}
}
*/
/*double stampaelemento(lista*pointer,int argv2)
{
double risultato;
if(pointer->pos == argv2)
{
printf("%lf ",pointer->elem);
risultato=pointer->elem;
return risultato;
}
else
{
pointer=pointer->prox;
}
}
*/
lista* inizializza(lista*pointer)
{
pointer = NULL;
return NULL;
}
// inserimento in testa
/*lista* inserisci(lista *pointer,int elemento)
{lista *testa = NULL;
pointer=(lista*)malloc(sizeof(lista));
pointer->elem=elemento;
pointer->prox=testa;
testa = pointer;
return pointer;}
*/
lista* inseriscicoda(lista *pointer,double elemento)
{
lista *punt,*cursore,*cursore1;
cursore=pointer;
punt=(lista*)malloc(sizeof(lista)); //dato da inserire
punt->elem=elemento;
punt->prox=NULL;
if (pointer==NULL) {pointer=punt;} //se la lista è vuota lo metto in testa
else{
while(cursore!=NULL) //scansione fino alla fine
{cursore1=cursore; //cursore1 serve per avere l'ultima posizione di cursore
cursore=cursore->prox;}
cursore1->prox=punt;}
return pointer;}
lista* carica(lista* pointer,char*nomefile)
{
double a,b;
FILE *fp;
if((fp=fopen(nomefile,"r"))==NULL)
return pointer;
pointer=NULL;
while (b=(fscanf(fp,"%lf",&a))!=EOF)
{
pointer=inseriscicoda(pointer,a);
}
fclose(fp);
return pointer;
}
lista* ordina(lista *pointer)
{
if (pointer && pointer->prox) {
int k;
do {
lista *punt = pointer;
k = 0;
while (punt->prox) {
lista *punt1 = punt;
punt = punt->prox;
if ((punt1->elem) > (punt->elem)) {
int tmp = punt1->elem;
punt1->elem = punt->elem;
punt->elem = tmp;
k = 1;
}
}
} while (k != 0);
}
return pointer;
}
/*lista* ricerca(lista * pointer,int element)
{
while(pointer!=NULL)
{
if(element == pointer->elem)
{
return pointer;
}
else
{
pointer= pointer->prox;
}
}
}
*/
lista* RitornaPosizione(lista*pointer,int argv2)
{ //contatore che aggiorna la posizione del nodo//
int posizione=0;
lista*p1 = pointer;
while(p1 != NULL)
{
posizione++;
p1->pos=posizione;
if(p1->pos == argv2)
{
return p1;
}
p1=p1->prox;
}
}
Ultima modifica: