Vai al contenuto

Potenze in C


stainer

Messaggi raccomandati

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 :D

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 :D

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

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

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

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?:baby:

:ghghgh:

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

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?

:ghghgh:

ho chiuso affari con: stainer - castor

Link al commento
Condividi su altri siti

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?

:ghghgh:

Poni ad esempio che quando l'utente inserisci un numero negativo esci dal for.

Link al commento
Condividi su altri siti

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... :baby:

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;    
}

:ghghgh: E se avessi detto un sacco di c******te??????? :ciao:

Wii code: 0734 3828 1483 3595

Mii name: BlackICE

Link al commento
Condividi su altri siti

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' :baby:

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?:ghghgh:

ho chiuso affari con: stainer - castor

Link al commento
Condividi su altri siti

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' :D

Per il secondo, poi controllo :D

Altro problema.

Per esercizio dovrei scrivere in maniera "artigianale" la funzione esponenziale, cioe' una funzione così strutturata

int esponenziale(int a, int :ciao:

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?:ciao:

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

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 :gira:

Wii code: 0734 3828 1483 3595

Mii name: BlackICE

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...