Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define DIM 4
- #define EXIT 0
- #define INSERT_ERROR -1
- #define NO_CHAR -2
- #define NEG_ESP -3
- /** funzione elevamento a potenza, per simulare base^esponente. ritorno = 1 * base ==> base * base **/
- int pow(int base, int esp){
- int i = 0,
- ritorno = 1;
- if(esp < 0)
- return NEG_ESP;
- for(i = 0; i < esp; i++){
- ritorno = ritorno * base;
- }
- return ritorno;
- }
- /** prende in input un char e ritorna il rispettivo int **/
- int convert_char(char c){
- switch(c){
- case '0':
- return 0;
- break;
- case '1':
- return 1;
- break;
- case '2':
- return 2;
- break;
- case '3':
- return 3;
- break;
- case '4':
- return 4;
- break;
- case '5':
- return 5;
- break;
- case '6':
- return 6;
- break;
- case '7':
- return 7;
- break;
- case '8':
- return 8;
- break;
- case '9':
- return 9;
- break;
- default:
- return NO_CHAR;
- break;
- }
- }
- /** prende in input un array di char, calcola la dimensione effettiva dell'array poi utilizzando la combinazione
- delle funzioni convert_char e pow, trasforma l'array di char nell'intero corrispondente**/
- int convert_str(char array[]){
- int total = 0,
- i = 0,
- cifra = 0,
- numero = 0,
- potenza = 0;
- //effettiva dimensione
- for(i = 0; i < DIM+1; i++){
- if(array[i] == '\0'){
- total = i;
- break;
- }
- }
- //se non si è inserito alcun numero
- if( total == 0 )
- return INSERT_ERROR;
- /* conversione effettiva */
- for(i = 0; i < total; i++){
- cifra = convert_char(array[i]); //estraggo un char alla volta e mediante convert_char arrivo alla cifra intera
- potenza = pow(10, total - 1 - i);//calcolo la posizione in base 10, in quanto tutti i numeri sono espremibili nella forma num * 10^pos, dove pos indica, per numeri > 0, se è unità - decine - centinaia o migliaia
- if(potenza == NEG_ESP){ //se si è dato un esponente negativo
- return NEG_ESP;
- } else {
- numero = numero + (cifra * potenza); //questo mi calcola il numro del quale dovrò calcolare la radice intera
- }
- }
- return numero ;
- }
- int inserisci(void){
- char input[DIM+1];
- scanf("%s", &input);
- if((input[0] == 'f' || input[0] == 'F') &&
- (input[1] == 'i' || input[1] == 'I') &&
- (input[2] == 'n' || input[2] == 'N') &&
- (input[3] == 'e' || input[3] == 'E')){
- return EXIT;
- } else {
- return convert_str(input);
- }
- }
- int radice(int numero){
- int i = 0;
- while(1){
- if(pow(i+1,2) > numero){
- break;
- }
- i++;
- }
- return i;
- }
- int main()
- {
- int num = 0;
- printf("+--------------------------------------------------+\n");
- printf("|-------- R A D I C E ---- Q U A D R A T A --------|\n");
- printf("+--------------------------------------------------+\n");
- while(1){
- printf("Inserire un numero intero di al massimo 4 cifre oppure 'FINE' :>");
- num = inserisci();
- if(num == 0){
- break;
- }
- if(num != NEG_ESP){
- printf("La radice quadrata del numero %d e' %d \n", num, radice(num));
- } else {
- printf("numero non valido... ");
- }
- }
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement