stainer Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 Ciao ragazzi, ho un problema, per casa mi hanno dato un esercizio...da fare il linguaggio C Scrivere un programma che stampi una tabella delle potenze graficamente ordinata: Intero Quadrato Cubo Quarta Quinta 1 1 1 1 1 2 4 8 16 32 Sapete aiutarmi? Il mio cervello mi dice che il codice è molto semplice Fin'ora ho provato cosi: #include<stdio.h> #include<math.h> int main() { int a1=1, a2=2, a3=3, a4=4, a5=5, i; /* 10 */ for(i=2; i<6; i++) { a1=pow(a1,i); a2=pow(a2,i); a3=pow(a3,i); a4=pow(a4,i); a5=pow(a5,i); } printf("t%d\t%d\t%d\t%d\t%d\t", a1, a2, a3, a4, a5); /* 15 */ return 0; Compila, ma niente di piu, è tutto sballato, fa una riga dove nella prima casella mette 1 e poi tutti numeri grandi:confused: Grazie iMac 21" Intel Core 2 Duo 3.06 GHz 4gb RAM 1,5 TB HD ... MacBookPro Intel Core 2 Duo 4gb RAM 320gb HD ... Windows 7 "RiDiCoLo"!!! Ho chiuso affari postivamente con: the_doctor , ~marco Link al commento Condividi su altri siti Altre opzioni di condivisione...
Cpu86 Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 1 #include<stdio.h> 2 #include<math.h> 3 4 int main() 5 6 { 7 int a1=1, a2=2, a3=3, a4=4, a5=5, i; 8 int pot1, pot2, pot3, pot4, pot5; 9 for(i=2; i<6; i++) 10 { 11 pot1=pow(i,a1); 12 pot2=pow(i,a2); 13 pot3=pow(i,a3); 14 pot4=pow(i,a4); 15 pot5=pow(i,a5); 16 printf("%d\t%d\t%d\t%d\t%d\n", pot1, pot2, pot3, pot4, pot5); 17 } 18 /* 15 */ 19 return 0; 20 } Edit: pow(base,esponente); Link al commento Condividi su altri siti Altre opzioni di condivisione...
Liver Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 Beh non ho ben capito cosa debba fare il programma.. comunque credo che dovresti mettere il printf all'interno del ciclo for... Ciao! Link al commento Condividi su altri siti Altre opzioni di condivisione...
Liver Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 In ritardo... Link al commento Condividi su altri siti Altre opzioni di condivisione...
Cpu86 Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 Non era solo quello il problema. sbagliava ad usare la pow e soprattutto ogni volta che elevava un numero a potenza, assegnava alla potenza il risultato, conseguenza nei cicli successivi il risultato cresceva esponenzialmente. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Eremar Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 una bella fregatura... MacBook Pro 2,4 GHz, 4 GB Ram, 500 GB Hd, OsX 10,6,5 Athlon 64 X2 5600 su MB Asus M3A32-MVP Deluxe - 8 GB ram - 3 TB - Arch Linux e Win Se7en Pod Classic, 80 GB iPhone 4, 16 Gb Link al commento Condividi su altri siti Altre opzioni di condivisione...
Cpu86 Inviato 6 Ottobre 2006 Segnala Condividi Inviato 6 Ottobre 2006 una bella fregatura... Fregatura cosa??? Link al commento Condividi su altri siti Altre opzioni di condivisione...
stainer Inviato 7 Ottobre 2006 Autore Segnala Condividi Inviato 7 Ottobre 2006 Grazie per l'aiuto Cpu86, alla fine sono riuscito ad eliminare 5 variabili e questo è il risultato: #include <stdio.h> #include <math.h> int main() { int i, pot1=1, pot2=2, pot3=3, pot4=4, pot5=5; for(i=2;i<6;i++) { pot1 = pow(i,1); pot2 = pow(i,2); pot3 = pow(i,3); pot4 = pow(i,4); pot5 = pow(i,5); printf("%d\t%d\t%d\t%d\t%d\n", pot1, pot2, pot3, pot4, pot5); } return 0; } A parte questo mi trovo con questo programma: devo prendere in input 20 variabili (senza inizializzarne 20, ovviamente! :P:baby: )e calcolarne la media. Io per ora, l'ho impostato cosi' ma va in segmentation_fault, #include<stdio.h> int main() { int avg, sum=0, i; scanf("%d", &i); for(i=0;i<=20;i++) sum+=i; avg=sum/20; printf("La media degli elementi immessi e'%d", avg); return 0; } Secondo me, e' la scanf che crea problemi, in quanto nel momento in cui viene chiamata dal programma va sì a dereferenziare la i, ma non sa che posso dare 20 valori anche perché io il ciclo for l'ho messo dopo la scanf Idee? iMac 21" Intel Core 2 Duo 3.06 GHz 4gb RAM 1,5 TB HD ... MacBookPro Intel Core 2 Duo 4gb RAM 320gb HD ... Windows 7 "RiDiCoLo"!!! Ho chiuso affari postivamente con: the_doctor , ~marco Link al commento Condividi su altri siti Altre opzioni di condivisione...
maranik Inviato 7 Ottobre 2006 Segnala Condividi Inviato 7 Ottobre 2006 La scanf va dentro il for. Al posto di i usa un'altra variabile, devi separare il contatore dalla variabile che deve prendere il dato in input. Link al commento Condividi su altri siti Altre opzioni di condivisione...
~marco Inviato 7 Ottobre 2006 Segnala Condividi Inviato 7 Ottobre 2006 Rispondo per Steiner, dato che l'abbiamo fatto insieme Una soluzione e' in effetti di includere la scanf nel for Curiosita' mia: come posso "aggiustare" il frammento di codice, nel caso in cui non sapessi in anticipo il numero degli elementi in ingresso? ho chiuso affari con: stainer - castor Link al commento Condividi su altri siti Altre opzioni di condivisione...
Cpu86 Inviato 7 Ottobre 2006 Segnala Condividi Inviato 7 Ottobre 2006 Rispondo per Steiner, dato che l'abbiamo fatto insiemeUna soluzione e' in effetti di includere la scanf nel for Curiosita' mia: come posso "aggiustare" il frammento di codice, nel caso in cui non sapessi in anticipo il numero degli elementi in ingresso? Poni ad esempio che quando l'utente inserisci un numero negativo esci dal for. Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackICE Inviato 9 Ottobre 2006 Segnala Condividi Inviato 9 Ottobre 2006 Grazie per l'aiuto Cpu86, alla fine sono riuscito ad eliminare 5 variabili e questo è il risultato: Alla fine ne puoi tenere anche solo una di variabile #include <stdio.h> #include <math.h> int main() { int i; for(i=2;i<6;i++) printf("%d\t%d\t%d\t%d\t%d\n", pow(i, 1), pow(i, 2), pow(i, 3), pow(i, 4), pow(i, 5)); return 0; } L'arte di scrivere codice offuscato... Per il secondo problemino, come detto da Cpu86 poni che esca dal ciclo all'immissione di un valore negativo. Oppure, se leggi le man di scanf, puoi semplicemente controllare il valore di ritorno di scanf, il quale sara' zero se non e' riuscito a convertire l'input (nel tuo caso in un decimale). Quindi semplicemente scrivendo in input un qualsiasi carattere non decimale esci dal ciclo. #include<stdio.h> int main() { int dec, tot=0, i=0; // i serve da contatore for(i=0; scanf("%d", &dec); i++) tot += dec; printf("La media degli elementi immessi e' %d", tot/i); return 0; } E se avessi detto un sacco di c******te??????? Wii code: 0734 3828 1483 3595 Mii name: BlackICE Link al commento Condividi su altri siti Altre opzioni di condivisione...
~marco Inviato 11 Ottobre 2006 Segnala Condividi Inviato 11 Ottobre 2006 Per il primo hai fatto il furbo da furbara, non ricordavo che la printf acccettasse anche funzioni. Diciamo che ho impostato il programma in maniera didattica, tie' Per il secondo, poi controllo :P Altro problema. Per esercizio dovrei scrivere in maniera "artigianale" la funzione esponenziale, cioe' una funzione così strutturata int esponenziale(int a, int che elevi la base a all'esponente b. Ovviamente ho definito il prototipo di funzione, però non so come ciclare " a per b volte ". Idee? ho chiuso affari con: stainer - castor Link al commento Condividi su altri siti Altre opzioni di condivisione...
Cpu86 Inviato 11 Ottobre 2006 Segnala Condividi Inviato 11 Ottobre 2006 Per il primo hai fatto il furbo da furbara, non ricordavo che la printf acccettasse anche funzioni.Diciamo che ho impostato il programma in maniera didattica, tie' Per il secondo, poi controllo Altro problema. Per esercizio dovrei scrivere in maniera "artigianale" la funzione esponenziale, cioe' una funzione così strutturata int esponenziale(int a, int che elevi la base a all'esponente b. Ovviamente ho definito il prototipo di funzione, però non so come ciclare " a per b volte ". Idee? int esponenziale(int a, int { int i,ris; for(i=1,ris=a;i<b;i++) ris *= a; return ris; } Link al commento Condividi su altri siti Altre opzioni di condivisione...
BlackICE Inviato 13 Ottobre 2006 Segnala Condividi Inviato 13 Ottobre 2006 La ricorsione! L'arma piu' potente di un programmatore ;-) int rexp(int a, int { if(b<0) return -1; else if(b==0) return 1; else return a*rexp(a, b-1); } Nemmeno una variabile locale! Diciamo che la funzione ritorna un numero negativo se c'e' un errore, cosa che accade se l'esponente diventa, per un qualche motivo oscuro, negativo (siamo nel caso di interi) Come al solito... non ho verificato il prog quindi ci puo' essere qualche errore piu' o meno grave. See you Wii code: 0734 3828 1483 3595 Mii name: BlackICE Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.