|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
[C] perchè questo semplice programma non funziona?
ciao ragazzi, ho fatto questo semplice programma come esercitazione per il C, e l'ho compilato con devc++, su vista. Il programma serve a controllare il numero di vocali e di consonanti in una parola di 10 lettere. I dubbi sono 2 : il primo è perchè non funziona inserendo la parola lunga esattamente 10 lettere (mi restituisce un valore inesatto, mentre se inizializzo le variabili a 0 mi da un valore di vocali sempre uguali a 0, e questo non capisco come sia possibile dato che le variabili se non vengono inizializzate si inizializzano da sole a 0).
COme domanda "facoltativa" vorrei chiedervi perchè se inserisco un numero minore di 10 lettere il programma non funziona...ovvero non viene eseguito nemmeno il calcolo... ecco il codice Codice:
#include<stdio.h>
#include<stdlib.h>
main(){
char v[10];
int count, cons;
printf("\n inserisci parola");
scanf("%c%c%c%c%c%c%c%c%c%c",&v[0],&v[1],&v[2],&v[3],&v[4],&v[5],&v[6],&v[7],&v[8],&v[9]);
for(int i=0;i<10;i++)if((v[i]='a')||(v[i]='e')||(v[i]='i')||(v[i]='o')||(v[i]='u'))count++;
cons=10-count;
printf("\n il numero delle vocali e' %d. Il numero delle consonanti e' %d",count,cons);
system("PAUSE");
return(0);
}
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Allora, un paio di cose:
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
A quanto ho capito quindi per avere una parola di lungheza variabile devo usare le stringhe, che nn sò usare. Volendo quindi mantenere la parola fissa a 10 lettere, senza usare le stringe, cosa sbaglio nel programma? Ho anche provato a stampare i valori dell'aray e non mi restutisce le lettere che ho inserito, ma dei numeri (che suppongo siano i numeri corrispondenti alle lettere nell'ascii). Comunque, volevo tralasciare questo programma che comunque ha delle nozioni di stringhe che nn ho fatto, volevo farvi vedere uno più interessante che non capisco dove sia l'errore : dato un vettore v1 e un numero K trovare l'elemento del vettore più prossimo a K. La mia tecnica è stata quella di sottrarre K a ogni elemento di v1, prendere il valore assoluto e metterlo in una variabile temporanea, e poi confrontarlo con quella successiva, che se è minore (in valore assoluto) mi prendeva il corrispettivo elemento del vettore. Tuttavia non mi esce il risultato, sebbene abbia fatto una prova su carta con delle tabella e mi esce. Ecco il codice : Codice:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int dim();
main(){
const int n=dim();
int v1[n],k,prox;
unsigned int temp,min;
int max;
printf("\n inserisci massimo valore degli elementi del vettore");
scanf("%d",&max);
srand(time(NULL));
for(int i=0;i<n;i++)v1[i]=rand()%max;
printf("\n il vettore v1 e' : ");
for(int i=0;i<n;i++)printf("%d ",v1[i]);
printf("\n\n Inserisci il valore di K \n ");
scanf("%d",&k);
min=v1[0]-k;
for(int i=0;i<n;i++){
temp=v1[i]-k;
if(temp<min){
min=temp;
prox=v1[i];
}
}
printf("\n l'elemento di v1 piu vicino a K e' %d \n",prox);
system("PAUSE");
return(0);
}
int dim(){
int n;
printf("\n inserisci la lunghezza dei vettori");
scanf("%d",&n);
while(n<0){
printf("\n reinserisci la lunghezza dei vettori");
scanf("%d",&n);
}
return n;
}
EDIT2 : mi corrego di nuovo, non funziona. Non so se è problema di vista (devcpp nn è supportato da vista) però prima aveva iniziato a funzionare, l'ho rpovato 5 volte e funzionava, ora ho chiuso e riaperto e non funziona
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one Ultima modifica di The-Revenge : 11-11-2009 alle 14:10. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
dai raga aiuto
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Che sia questo? :P
Scherzi a parte, innanzitutto è fattibile che ti escano risultati a volte giusti a volte sbagliati: il contenuto dell'array creato con numeri casuali è sempre diverso, quindi potresti avere un bug che si verifica solo in determinate condizioni. A una prima occhiata, noto che nel codice non usi il valore assoluto nel fare la differenza. Questo per cominciare potrebbe essere un problema. Prova a compilare questo codice: Codice:
#include <iostream>
using namespace std;
int main() {
unsigned int n;
n = -3;
cout << n << endl;
}
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
esattamente
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
ho usato il comando ABS ma il problema si ripete, ho dei valori esatti a volte, e a volte sbagliati. Ecco il codice :
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int dim();
main(){
const int n=dim();
int v1[n],k,prox;
int temp,min;
int max;
printf("\n inserisci massimo valore degli elementi del vettore");
scanf("%d",&max);
srand(time(NULL));
for(int i=0;i<n;i++)v1[i]=rand()%max;
printf("\n il vettore v1 e' : ");
for(int i=0;i<n;i++)printf("%d ",v1[i]);
printf("\n\n Inserisci il valore di K \n ");
scanf("%d",&k);
min=v1[0]-k;
min=abs(min);
for(int i=1;i<n;i++){
temp=v1[i]-k;
temp=abs(temp);
if(temp<min){
min=temp;
prox=v1[i];
}
}
printf("\n l'elemento di v1 piu vicino a K e' %d \n",prox);
system("PAUSE");
return(0);
}
int dim(){
int n;
printf("\n inserisci la lunghezza dei vettori");
scanf("%d",&n);
while(n<0){
printf("\n reinserisci la lunghezza dei vettori");
scanf("%d",&n);
}
return n;
}
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Mi sono permesso di riscriverlo in modo (a mio parere) più comprensibile:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int dim() {
int n;
printf("Inserisci la lunghezza dei vettori: ");
scanf("%d",&n);
while (n < 0) {
printf("Reinserisci la lunghezza dei vettori: ");
scanf("%d", &n);
}
return n;
}
int main() {
const int n = dim();
int v1[n], k, prox;
int temp, min;
int max;
srand(time(NULL));
printf("Inserisci massimo valore degli elementi del vettore: ");
scanf("%d",&max);
for (int i = 0; i < n; i++) {
v1[i] = rand() % max;
}
printf("Il vettore v1 e': ");
for (int i = 0; i < n; i++) {
printf("%d ", v1[i]);
}
printf("\n");
printf("Inserisci il valore di K: ");
scanf("%d", &k);
min = abs(v1[0] - k);
for (int i = 1; i < n; i++) {
temp = abs(v1[i] - k);
if (temp < min) {
min = temp;
prox = v1[i];
}
}
printf("L'elemento di v1 piu vicino a K e' %d \n", prox);
system("PAUSE");
return 0;
}
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
non so perchè non dovrebbe funzionare...cmq ecco alcuni valori per cui mi restituisce un errore (col mi programma) : il vettore v1 è 4 7 4 6 7 k è 5 l'elemento eccc ecc è 63 un altro : 0 4 0 2 0 k è 1 l'elemento ecc ecc è 63 però tra il primo e l'ultimo errore me ne ha fatto un sacco corrette...anche con numeri ripetuti...bhò
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Devi inizializzare prox: nel caso l'elemento più vicino sia il primo, ha valore casuale.
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
ok...per inizializzare dici metterlo =0?
Comunque non ci sto capendo più niente con devcpp, ho fatto un programma sul PC del mio amicoc he ha windows XP, mentre sul mio computer che ha windows vista mi dice che ha smesso di funzionare quando lo avvio,nonostante abbia cinluso delle libreria necessarie per windows vista (cercando con google)
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
No, dovresti inizializzarlo a v1[0]. Non so perchè su diversi SO si comporti in modi diversi, ma io fossi in te non starei a sbatterci più di tanto la testa
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
ad esempio questo programma facilissimo io non capisco perchè non funziona, mi dà "inserire 2a lettere" e "inserire 3a lettera" tuttto attaccato e me ne fa inserire una sola... Codice:
#include<stdio.h>
#include<stdlib.h>
main(){
char v[10];
int count=0, cons=0,k=0;
for(int i=0;i<10;i++){
k=i;
printf("\n inserisci %da lettera: ",k+1);
scanf("%c",&v[i]);
}
printf("\n la parola e' :");
for(int i=0;i<10;i++)printf("%c",v[i]);
for(int i=0;i<10;i++)if((v[i]=='a')||(v[i]=='e')||(v[i]=='i')||(v[i]=='o')||(v[i]=='u'))count++;
cons=10-count;
printf("\n il numero delle vocali e' %d. Il numero delle consonanti e' %d",count,cons);
system("PAUSE");
return(0);
}
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one Ultima modifica di The-Revenge : 15-11-2009 alle 11:16. |
|
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
Fatti stampare il codice ASCII dei caratteri invece dei caratteri stessi, e capirai abbastanza presto il perchè.
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
__________________
Ho venduto a : truedocman2004,ragen-fio Ho acquistato da :shinakuma, britt-one |
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 198
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:34.




















