Pagina 1 di 2

Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 20:39
da angrigio
Salve, sto scrivendo un programma in c con funzione di inserimento di 2 array con successiva stampa del risultato.
Impostando per il vettore lunghezza pari a 5 ,
Il risultato a video e' il seguente:

Inserisci gli elementi dell'Array 1:
0: 3
1: 5
2: 9
3: 2
4: 7

Array 1 [ 3.00000 5.00000 9.00000 2.00000 7.00000]

Inserisci gli elementi dell'Array 2:
0: -5
1: 1.2
2: 34
3: 3.5
4: 2

Array 2 [ -5.00000 1.200000 3400000 3.500000 2.00000]




Ho scritto un codice in C cercando di usare una funzione sola per l'inserimento degli Array.
Codice: Seleziona tutto
#include<stdio.h>
void InserisciArray(float[],int,float);
int main()

{
  #define lungh 5
   float vettore[lungh];
   int alfa;
   printf("Inserisci gli elementi dell'array 1 :");
   
   void InserisciArray(float[],int,float);
 

return 0;
}

void InserisciArray(float inserire[],int inserire1,float previsto)
{
float uno;
   int due;
   float tre[lungh];


        for (due =0 ; due < lungh; due++)

   {
      scanf("%d", &tre);
      printf("%f:",tre[due]);



}
}


Codice che pero' non e' in grado di generare la videata di quello che sto cercando di fare.
Se avete qualche guida per lo studio delle funzioni ve ne sarei grato

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 21:20
da angrigio
Ho provato ad usare una funzione per stampare a video il primo punto del problema,il programma una volta fatto girare visualizza la sola scritta Inserisci gli elementi dell'array 1
e poi termina.
Quindi ho fatto un errore di progettazione del software che pero' non so individuare

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 21:48
da simo85
Rivedi la funzione:

Codice: Seleziona tutto
void InserisciArray(float inserire[],int inserire1,float previsto)
{
  float uno;
  int due;
  float tre[lungh];

  for (due =0 ; due < lungh; due++)
  {
    scanf("%d", &tre);
    printf("%lf:", tre[due]);
  }
}


Non capisco perché passi un array, un intero ed un double per argomento e poi non usi nessuno di loro.
Comunque con la prima chiamata alla scanf vuoi assegnare un numero intero al primo elemento di un array float.

Magari come esempio vedi questo:

Codice: Seleziona tutto
#include <stdio.h>

#define MAX_LEN 5

void fillArray(double array[], int size)

   int i = 0;

   printf("Insert value:\n");
   for(i = 0; i < size; i++)
   {
      printf("%d: ", i);
      scanf("%lf", &(array[i]));
   }
}

void printArray(double array[], int size)

   int i = 0;
   for(i = 0; i < size; i++)
      printf("%lf ", array[i]);
   printf("\n");
}

int main(void)
{
   double aarr[MAX_LEN] = {0.0};
   double barr[MAX_LEN] = {0.0};

   fillArray(aarr, MAX_LEN);
   fillArray(barr, MAX_LEN);
   printArray(aarr, MAX_LEN);
   printArray(barr, MAX_LEN);

   return 0;
}


PS: videata ? :-|

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 22:03
da angrigio
Ti ringrazio per la risposta: provo a far girare il programma con le modifiche suggerite.

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 22:12
da angrigio
Ho usato il programma che hai fatto .Funziona.
Non capisco il controllo del ciclo fatto su int size. La lunghezza del vettore non e' data da MAX_LEN .
Forse il parametro int size "prende" la dimensione del vettore (che nel caso previsto e' 5)?

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 22:28
da simo85
È solo un altro modo di farlo. Io sono abituato a passare sempre il numero di elementi del buffer quando passo un buffer per argomento.

La lunghezza del vettore double è MAX_LEN.

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 28 mar 2016, 22:33
da posta10100
angrigio ha scritto:Non capisco il controllo del ciclo fatto su int size.

perché Foto Utentesimo85 è saggio e ha scritto una funzione generica che può essere chiamata con lunghezze di array diverse nello stesso programma, ad esempio puoi fare una cosa del genere:

Codice: Seleziona tutto
    #include <stdio.h>

    #define MAX_LEN_A 5
    #define MAX_LEN_B 10

    void fillArray(double array[], int size)
    {
       .....
    }

    void printArray(double array[], int size)
    {
       .....
    }

    int main(void)
    {
       double aarr[MAX_LEN_A] = {0.0};
       double barr[MAX_LEN_A] = {0.0};
       double carr[MAX_LEN_B] = {0.0};
       double darr[MAX_LEN_B] = {0.0};

       printf("Array da %i elementi", MAX_LEN_A);
       fillArray(aarr, MAX_LEN_A);
       fillArray(barr, MAX_LEN_A);
       printArray(aarr, MAX_LEN_A);
       printArray(barr, MAX_LEN_A);

       printf("Array da %i elementi", MAX_LEN_B);
       fillArray(aarr, MAX_LEN_B);
       fillArray(barr, MAX_LEN_B);
       printArray(aarr, MAX_LEN_B);
       printArray(barr, MAX_LEN_B);

       return 0;
    }


Foto Utentesimo85 è anche molto veloce a rispondere e mi ha bruciato sul tempo :mrgreen:

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 29 mar 2016, 9:49
da angrigio
Nell'istruzione del programma e' posta la seguente:
Codice: Seleziona tutto
double aarr[MAX_LEN_A] = {0.0};
double barr[MAX_LEN_A] = {0.0};
Non riesco a capire perche' inizializzare l'array .

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 29 mar 2016, 9:54
da simo85
angrigio ha scritto:Non riesco a capire perche' inizializzare l'array

A me piace inizializzare tutto a zero quando dichiaro una variabile o un array.
Non è obbligatorio..

Re: Videata in Linguaggio c non riuscita

MessaggioInviato: 29 mar 2016, 11:35
da simo85
posta10100 ha scritto:perché simo85 è saggio ...

:^o Ma non è vero dai :lol:

Il primo motivo per cui faccio cosi è perché, quando voglio iterare un buffer passat per argomento dentro una funzione, devo conoscerne la dimensione. Non potrei di certo usare la funzione sizeof.