|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Junior Member
Iscritto dal: Nov 2010
Messaggi: 6
|
funzione con struct e puntatori
Ciao,stavo cercando di risolvere questo esercizio,tuttavia dopo infiniti tentativi di farlo girare correttamente non ne sono venuto ancora a capo. Sapreste perfavore indicarmi dove sto sbagliando? Grazie 1000
L'esercizio è questo Quote:
Codice:
#include<stdio.h>
#include<stdlib.h>
#define d 100
typedef struct {int A;int B[d];}ST;
void C(int *x){
int i,minimo,posizione=-1;
minimo=x->B[0];
for(i=1;i<d;i++)
if(x->B[i]<x->B[0]){
minimo=B[i];}
if(minimo){
posizione=i;
}
x->A=posizione;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12862
|
Ci sono degli errori nel codice, il testo dice che il vettore dovrebbe essere di 100 elementi di double, tu lo fai di int.
In secondo luogo il puntatore che passi nella funzione dev'essere del tipo ST, e non int. Comunque anche il codice all'interno non mi sembra corretto, non si capisce perché nel for confronti tutti gli elementi con il primo, anziché con il minimo. |
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2010
Messaggi: 6
|
Sì avevo messo int al posto di double solo per non incasinarmi di più nel farlo girare. Come faccio a confrontare i valori con il minimo se non so qual è il minimo? Avevo pensato di attribuire il valore minimo al primo e poi lo confronto con gli altri.
Codice:
typedef struct {int A;double B[d];}ST;
void C(ST *x){
int i,posizione=-1;
double minimo;
minimo=x->B[0];
for(i=1;i<d;i++)
if(x->B[i]< minimo){
minimo=B[i];}
if(minimo){
posizione=i;
}
x->A=posizione;
}
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12862
|
Premesso che dovresti indentare meglio il codice, in particolare sarebbe meglio che il for avesse le parentesi graffe, comunque c'è un errore nella riga in cui fai:
Codice:
minimo = B[i] Codice:
minimo = x->B[i] Comunque sarebbe meglio che postassi direttamente gli errori che hai, anche perché queste sono cose che di sicuro il compilatore ti dice e che puoi correggere da solo. Dopo il ciclo for, quando fai: Codice:
if (minimo) ... Codice:
if (minimo >= 0) ... |
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2010
Messaggi: 6
|
Adesso il programma perlomeno gira,tuttavia non funziona ancora come dovrebbe,cioè non mi segna la posizione corretta.
Codice:
#include<stdio.h>
#include<stdlib.h>
#define d 5
typedef struct {int A;double B[d];}ST;
void C(ST *x){
int i,posizione=-1;
double minimo;
minimo=x->B[0];
for(i=1;i<d;i++){
if(x->B[i]< minimo){
minimo=x->B[i];}
if(minimo>=0){
posizione=i;
}
}
x->A=posizione;
}
int main ()
{
ST N;
int j;
for(j=0;j<d;j++){
scanf("%lf",&N.B[j]);
}
C(&N);
printf("%d\n",N.A);
system("pause");
return 0;
}
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12862
|
Prova ad arrivarci da solo, nel senso che a te interessa sapere la posizione del minimo, solo che questa posizione logicamente può cambiare ad ogni passo del ciclo, in particolare pensa a quando cambia e a quel punto aggiorni la posizione di conseguenza.
Come suggerimento, allo stato attuale, non ti dovrebbe servire affatto controllare che il minimo sia >= 0. |
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:29.


















