AleksandarArkan

F - funzioni varie

Mar 27th, 2015
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.73 KB | None | 0 0
  1. //Funzioni
  2.  
  3. /*-----------------------------------------------------------------------*/
  4.  
  5. //1)Dato un vettore toglie gli elementi dispari
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. //prototipo funzione
  11. int *toglidispari(int *vettore,int n);
  12.  
  13. int main(){
  14.    
  15.     int dimensione;
  16.     //questa variabile puntatore mi serve per allocare
  17.     //la memoria necessaria per il mio vettore che andro'
  18.     //ad acquisire
  19.     int *p;
  20.    
  21.     //effettuo la lettura della dimensione del vettore
  22.     printf("Quanti elementi avra' il tuo vettore: \n");
  23.     scanf("%d", &dimensione);
  24.  
  25.     //alloco la memoria necessaria per il vettore
  26.     p=(int *)malloc(sizeof(int)*dimensione);
  27.    
  28.    
  29.    
  30.     //riempio il vettore
  31.     printf("Inserisci i valori: \n");
  32.     int i;
  33.     for(i=0;i<dimensione;i++){
  34.         printf("Inserisci elemento %d: ", i+1);
  35.         scanf("%d", &p[i]);
  36.     }
  37.    
  38.     //siccome la mia funzione ritorna un puntatore.
  39.     //allora dichiaro un variabile puntatore mia,  nella quale
  40.     //andro a mettere il puntatore restituito dalla funzione
  41.     int *risultato;
  42.     //metto in risultato , il puntatore che mi restituisce la funzione
  43.     risultato=toglidispari(p,dimensione);
  44.    
  45.     //ora il mio risultato e' nella variabile puntatore
  46.     //nella quale ho messo il risultato.
  47.     //faccio la stampa
  48.     for(i=0;i<dimensione;i++){
  49.         printf("Vettore nuovo :%d\n", risultato[i] );
  50.     }
  51.    
  52.     return 0;
  53.    
  54.    
  55. }
  56.  
  57. //definzione della funzione
  58. //visto che voglio restituire un vettore, ma non posso in senso
  59. //vero e proprio restituire un vettore, allora restituisco un
  60. //puntatore al primo elemento
  61. int *toglidispari(int *vettore,int n){
  62.         int i;
  63.         //la variabile con_dispari mi serve per sapere
  64.         //in quale posizione scrivere i numeri nel nuovo
  65.         //vettore
  66.         int cont_dispari;
  67.         cont_dispari=0;
  68.         //il successivo puntatore con la successiva allocazione
  69.         //della memoria mi serve perche dopo lo devo restituire
  70.         int *nuovo;
  71.         nuovo=(int *)malloc(sizeof(int)*n);
  72.         for(i=0;i<n;i++){
  73.             if(vettore[i]%2==0){
  74.                 nuovo[cont_dispari]=vettore[i];
  75.                 cont_dispari++;
  76.             }
  77.         }
  78.         //ritorno il puntatore
  79.         return nuovo;
  80. }
  81. /*-----------------------------------------------------------------------*/
  82. //2)Conta il numero occorrenze di un carattere all'interno di una stringa
  83. #include <stdio.h>
  84. #include <stdlib.h>
  85.  
  86. //prototipo della funzione
  87. int contaocc(char *s, char c);
  88.  
  89. //main di prova
  90. int main(){
  91.     char stringa[]="aleksandar123";
  92.     int risultato;
  93.     risultato=contaocc(stringa,'a');
  94.     printf("%d", risultato);
  95.    
  96.    
  97. }
  98.    
  99. //definizione della funzione
  100. int contaocc(char *s, char c){
  101.     //variabili che mi servono
  102.     int contatore;
  103.     contatore=0;
  104.    
  105.     while(*s!='\0'){//fino a quando non incontri il carattere di terminazione
  106.     //vai a controllare se il carattere puntato corrisponde al carattere che stiamo
  107.     //cercando, se si aumenta il contatore
  108.         if(*s==c)
  109.             contatore++;
  110.         //faccio avanzare il while 
  111.         s++;//fai avanzare il puntatore
  112.     }
  113.     //sono fuori dal ciclo while, ora posso restituire il risultato
  114.     return contatore;//ritorna il risultato che mi dice quante occorrenze ci sono
  115.     //di quella lettera
  116. }
  117. /*-----------------------------------------------------------------------*/
  118. //3)Funzione che stampa una scritta, finche non viene premuto un carattere
  119. #include <stdio.h>
  120. #include <stdlib.h>
  121.  
  122. //prototipo della funzione
  123. void stampamess(void);
  124.  
  125. //main di prova
  126. int main(){
  127.     stampamess();
  128.  
  129.     return 0;
  130. }
  131.    
  132. //definizione della funzione
  133. void stampamess(void){
  134.     char c;
  135.     printf("Premere un tasto per continuare\n");
  136.     scanf("%c", &c);//la lettura del carattere la uso per far terminare il programma
  137.     }
  138.    
  139.  
  140. /*-----------------------------------------------------------------------*/
  141. //4)Funzione che calcola qualunque potenza
  142. #include <stdio.h>
  143. #include <stdlib.h>
  144. /*Primo esercizio.
  145.  * scrivere una funzione che calcoli qualunque potenza con esponente intero maggiore uguale a 0*/
  146.  
  147.  
  148.  
  149. //prototipo della funzione
  150. //questa funzione prende come parametri la base e l'esponente
  151. int qualunquePotenza(int base,int esponente);
  152.  
  153. //main di prova
  154. main(){
  155.     int risultato;
  156.     risultato=qualunquePotenza(2,-3);
  157.    
  158.     printf("%d", risultato);
  159.     }
  160.    
  161. //definizione della funzione
  162. int qualunquePotenza(int base, int esponente){
  163.         //nel caso dell'esponente negativo viene restituito -1
  164.         if(esponente<0){
  165.             return -1;//mi assicuro che l esponente sia maggiore uguale a 0.
  166.             //se per caso mette un valore minore di zero, restituisci -1
  167.         }
  168.         //se l esponente non e' negativo, provvedo a calcolare la potenza
  169.         int prodotto;
  170.         prodotto=1;//non posso inizializzarla a zero, perche altrimenti mi porta a zero
  171.         //tutto il prodotto
  172.        
  173.         //l'esponente indica anche il numero di volte che dobbiamo moltiplicare
  174.         //la base per se stessa
  175.         while(esponente>0){
  176.             prodotto=prodotto*base;
  177.             esponente--;//decrementiamo esponente, ossia il numero di volte
  178.             //ancora da moltplicare la base per se stessa
  179.         }
  180.        
  181.         return prodotto;//ritorna il risultato
  182.        
  183. }
  184.  
  185. /*-----------------------------------------------------------------------*/
  186. //5)Calcola i numeri primi fino a N
  187.  
  188. #include <stdio.h>
  189. #include <stdlib.h>
  190.  
  191. void primin(int n);
  192.  
  193. int main(){
  194.         primin(50);
  195.    
  196. }
  197.  
  198. //definizione dell esercizio
  199.  
  200. //la funzione ausiliaria che mi serve per stabilire se devo
  201. //stampare un numero o no
  202. int isprimo(int n){
  203.     int divisore;
  204.     divisore=2;
  205.    
  206.     while(divisore<n){
  207.         if(n%divisore==0){
  208.             return 0;//falso non e' primo, perche ho appena
  209.             //trrovato un divisore compreso tra 2 e il numero-1.
  210.             // e sapiamo che per essere primo non deve avere
  211.             //divisore eccetto 1 e il numero stesso
  212.         }
  213.         divisore++;
  214.         }
  215.     return 1;
  216.     }
  217.  
  218.  
  219. void primin(int n){
  220.     int contatore;
  221.     contatore=0;
  222.    
  223.     while(contatore<=n){
  224.             if(isprimo(contatore)==1)
  225.                 printf("%d ", contatore);
  226.                
  227.             contatore++;
  228.     }
  229. }
  230.  
  231.  
  232. /*-----------------------------------------------------------------------*/
  233. //6)Conta il numero di caratteri e di cifre di una stringa
  234.  
  235.  
  236. #include <stdio.h>
  237. #include <stdlib.h>
  238.  
  239. //prototipo della funzione
  240. void contaCarCif(char *s);
  241.  
  242. //main di prova
  243. int main(){
  244.     char stringa[]="aleksandar123";
  245.     contaCarCif(stringa);
  246. }
  247.    
  248. //definizione della funzione
  249. void contaCarCif(char *s){
  250.     int ContCar,ContCif;
  251.     ContCar=0;
  252.     ContCif=0;
  253.     while(*s!='\0'){
  254.         if((*s>96 && *s<123) || (*s>64 && *s<91) ){
  255.             ContCar++;
  256.         }
  257.         if(*s>47 && *s<58){
  258.             ContCif++;
  259.         }
  260.         //faccio avanzare il while 
  261.         s++;
  262.     }
  263.     //sono fuori dal ciclo while, ora posso restituire il risultato
  264.     printf("I caratteri sono %d\n", ContCar);
  265.     printf("Le cifre sono %d\n", ContCif);
  266.     printf("La funzione e' Terminata!!!");
  267. }
  268.  
  269. /*-----------------------------------------------------------------------*/
  270. //7)Calcola i numeri triangolari fino ad un certo numero
  271.  
  272. #include <stdio.h>
  273. #include <stdlib.h>
  274.  
  275.  //prototipo della funzione
  276.  //che calcola ennesimo numero triangolare
  277.   int triangolare(int n);
  278.   void visualiizaTriang(int n);
  279.  
  280.  
  281. int main(){
  282.     visualiizaTriang(50);
  283.     }
  284.  
  285.  //l'ennesimo numero triangolare e' dato dalla somma di tutti numeri fino a quello
  286.  
  287.  int triangolare(int n){
  288.      int somma;
  289.      somma=0;
  290.      int contatore;
  291.      contatore=1;
  292.      while(contatore<=n){
  293.         somma=somma+contatore;
  294.         contatore++;
  295.      }
  296.      return somma;
  297. }
  298.  
  299.  
  300. //visualizzo i numeri triangolari minori di n
  301. void visualiizaTriang(int n){
  302.     int count;
  303.     count=0;
  304.     int restituisci;
  305.     while(count<n && triangolare(count)<n){
  306.        
  307.         restituisci=triangolare(count);
  308.         printf("%d ", restituisci);
  309.         count++;
  310.         }
  311.    
  312.     }
  313.    
  314. /*-----------------------------------------------------------------------*/
  315. //8)Calcola il cubo dei numeri < N fino a quando uno dei cubi non supera N
  316.  
  317. #include <stdio.h>
  318. #include <stdlib.h>
  319.  
  320. //definisco la funzione cubo
  321. //prototipo funzione
  322. int cubo(int n);
  323. void cubofinon(int n);
  324.  
  325. int main(){
  326.         cubofinon(100);
  327.    
  328. }
  329.  
  330. //definizione cubo
  331. int cubo(int n){
  332.     return n*n*n;
  333.     }
  334.    
  335. //definizione funzione principale
  336. void cubofinon(int n){
  337.     int contatore;
  338.     contatore=0;
  339.     while(contatore<n && cubo(contatore)<n){
  340.             printf("%d ",cubo(contatore));
  341.             contatore++;
  342.     }
  343.    
  344. }
  345.  
  346.  
  347.  
  348. /*-----------------------------------------------------------------------*/
  349. //9) Tre varie funzioni
  350.  
  351. #include <stdio.h>
  352. #include <stdlib.h>
  353.  
  354. //prototipi delle funzioni
  355.  
  356. //14 - realizzare una funzione che accetti in ingresso un numero
  357. //positivo n e visualizzi la successione dei numeri interi positivi
  358. //da 1 a n.
  359.  
  360. void successione1n(int n);
  361.  
  362. /*16
  363.  * realizzare una funzione che accetti in ingresso due numeri
  364.  * interi positivi n e m, n minore di m, e visualizzi la
  365.  * successione da n ad m*/
  366. void daNadM(int n, int m);
  367.  
  368. /*15
  369.  * realizzare una funzione che accetti in ingresso un intero
  370.  * n e visualizzi la successione dei numeri interi positivi
  371.  * dispari da 1 a n*/
  372.  
  373. void disparin(int n);
  374.  
  375.  
  376. int main(){
  377.         //provo 14
  378.         successione1n(10);
  379.         //provo 16
  380.         daNadM(8,15);
  381.         //provo 15
  382.         disparin(15);
  383.    
  384.     }
  385.  
  386. //14
  387. void successione1n(int n){
  388.     int contatore;
  389.     contatore=0;
  390.     while(contatore<=n){
  391.         printf("%d  ", contatore);
  392.         contatore++;
  393.     }
  394.     printf("\n");
  395. }
  396.  
  397. //16
  398. void daNadM(int n, int m){
  399.     if(n>m)
  400.         printf("\n Errore! Il primo numero deve essere minore del secondo\n");
  401.     else{
  402.         while(n<=m){
  403.             printf("%d ", n);
  404.             n++;
  405.         }   //chiudo while
  406.     }//chiudo else
  407.     printf("\n");
  408. }
  409.  //15
  410.  void disparin(int n){
  411.      int contatore;
  412.      contatore=0;
  413.      while(contatore<=n){
  414.             if(contatore%2==1)
  415.                 printf("%d ", contatore);
  416.          contatore++;
  417.      }
  418. }
  419.  
  420. /*-----------------------------------------------------------------------*/
  421. //10)Data una stringa converti le lettere minuscole in maiuscole
  422.  
  423. void convertinMai(char *s){
  424.     while(*s!='\0'){
  425.         if(*s>96 && *s<123)
  426.             *s=*s-32;
  427.         s++;
  428.     }
  429. }
  430.  
  431. /*-----------------------------------------------------------------------*/
  432. //11)Calcola il fattoriale di tutti numeri compresi tra 1 e N
  433.  
  434. #include <stdio.h>
  435. #include <stdlib.h>
  436.  
  437. //prototipo della funzione
  438. int fattoriale(int n);
  439. void fattfinon(int n);
  440.  
  441. //main di prova
  442. int main(){
  443.     fattfinon(8);
  444.    
  445. }
  446.  
  447.  
  448. //definizione della funzione ausiliaria
  449. int fattoriale(int n){
  450.     if(n!=0)
  451.         return n*fattoriale(n-1);
  452.     else
  453.         return 1;
  454.     }
  455.  
  456. //definizione della funzione principale che fa uso
  457. //della funzione ausiliaria
  458. void fattfinon(int n){
  459.     int contatore;
  460.     contatore=0;
  461.     while(contatore<=n){
  462.             printf("%d|", fattoriale(contatore) );
  463.             contatore++;
  464.     }
  465. }
  466.  
  467. /*-----------------------------------------------------------------------*/
  468. //12)Determina se una stringa e’ vuota
  469.  
  470. /*determina se l'insieme e' vuoto*/
  471.  
  472. int is_empty(const char *set){
  473.     return (set[0]=='\0');//qui ce un test booleano,
  474.     //viene controllato se il primo carattere della stringa e' un
  475.     //carattere di fine stringa, e di conseguenza si ha che si tratta
  476.     //di una stringa vuota, se questa cosa e' vera allora viene restituito
  477.     //1 che vuol dire true, altrimenti ci restituira' 0.
  478. }
Advertisement
Add Comment
Please, Sign In to add comment