Vés al contingut

Usuari:Jordibaucells/C/C++

De la Viquipèdia, l'enciclopèdia lliure
Programació


Exercicis (estructures de control)[modifica]

Exercici 1[modifica]

/*
 * Demana dos nombres "a i b" i indica si la seva suma es N-P o zero.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

    int a;
    int b;
    int r;
    printf("Introdueix dos números i diré si es N-P/O\n\n");
    scanf("%d %d", &a, &b);
    r=a+b;
    if ((r>0) || (r=0))
        {
            printf ("\nEl número és positiu o 0\n\n");
        } 
    else
            printf ("\nEl número es negatiu\n\n");
        
    return (EXIT_SUCCESS);

}

Exercici 2[modifica]

/*
 * Algosisme que digui si un any es bixest. Per a saber-ho utilitzem la següent
 * regla: Un any es bixest si és divideix per 400, o bé si és divisible per 4
 * però no per 100.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{

    int any;

    printf("Introdueix un any\n\n");
    scanf("%f", any);
    
    if ((any % 400==0) || (any % 4==0 && any % 100==0))
        {
            printf ("\nL'any es bixest\n\n");
        } 
    else
            printf ("\nL'any no és bixest\n\n");
        
    return (EXIT_SUCCESS);

}

Exercici 6[modifica]

/* 
 * Escriviu un programa que llegeixi un enter i digui si és negatiu, positiu o zero.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int a;

    printf("Introdueix un número\n\n");
    scanf("%d", &a);

    if(a==0){
        printf("El número és 0\n\n");
    }
    else
        if(a<0){
			printf("El número es negatiu\n\n");
        }
        else
            printf("El número positiu\n\n");
     return (EXIT_SUCCESS);
}

Exercici 7[modifica]

/* 
 * Escriviu un programa que demani el número d'un mes (1 a 12) i visualitzi
 * el nombre de dies del mes (sense considerar si és bixest).
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int a;

    printf("Introdueix un mes\n\n");
    scanf("%d", &a);

    if((a==1) || (a==3) || (a==5) || (a==7) || (a==8) || (a==10) || (a==11)){
        printf("El mes té 31 dies\n\n");
    }
    else
        if((a==4) || (a==6) || (a==9) || (a==11)){
            printf("El mes té 30 dies\n\n");
        }
        else
            printf("El mes té 28 dies\n\n");
    return (EXIT_SUCCESS);
}

Exercici 8[modifica]

/* 
 * Escriviu un programa que simuli una calculadora simple. Llegeix dos enters
 * i un caràcter. Si el caràcter és un +, s'imprimeix la suma; si és un -,
 * s'imprimeix la diferència; si és un *, s'imprimeix el producte; si és un /,
 * s'imprimeix el quocient; i si és un % s'imprimeix el residu.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int a;
    char car;
    int b;

    printf("\nIntrodueix una operació\n\n");
    scanf("%d %c %d", &a,&car,&b);

    if(car=='*'){
        printf("\nEl resultat d'aquesta multiplicació és %d\n\n",a*b);
    }
    else
        if(car=='/'){
            printf("\nEl resultat d'aquesta divisió és %d\n\n",a/b);
        }
        else
            if(car=='+'){
                printf("\nEl resultat d'aquesta suma és %d\n\n",a+b);
            }
            else
                if(car=='-'){
                    printf("\nEl resultat d'aquesta resta és %d\n\n",a-b);
                }
                else
                    if(car=='%'){
                        printf("\nEl residu d'aquesta divisió és %d\n\n",a%b);
                    }
                    else
                        if((car!='*') || (car!='/') || (car!='+') || (car!='-') || (car!='%')){
                            printf("\nOperació incorrecta\n\n");
                        }
    return (EXIT_SUCCESS);
}

Exercici 20[modifica]

/* 
 * Escriviu un programa que llegeixi dos enters dintre de dues variables, intercanviï els valors de
 * les dues variables mitjançant sentències d'assignació, i a continuació mostri el resultat.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int x;
    int y;
    int z;

    printf("Introdueix dos números\n\n");
    scanf("%d %d", &x, &y);

    z=x;
    x=y;
    y=z;
    

    printf("\nEl resultat es %d i %d.\n\n",x,y);
    return (EXIT_SUCCESS);
}

Exercici 32[modifica]

/* 
 * Escriviu un programa que desglossi certa quantitat de segons introduïda
 * per teclat en el seu equivalent en setmanes, dies, hores, minuts i segons.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int segons;
    int setmanes;
    int dies;
    int hores;
    int minuts;

    printf("Introdueix els segons\n\n");
    scanf("%d", &segons);

    minuts=60;
    hores=60*60;
    dies=3600*24;
    setmanes=3600*24*7;
    
    printf("\nLes setmanes són: %d.",segons/setmanes);
    segons=segons%setmanes;
    printf("\nEls dies són: %d.",segons/dies);
    segons=segons%dies;
    printf("\nLes hores són: %d.",segons/hores);
    segons=segons%hores;
    printf("\nEls minuts són: %d.",segons/minuts);
    segons=segons%minuts;
    printf("\nEls segons són: %d.\n\n",segons);
         return (EXIT_SUCCESS);
}

Exercicis (vectors)[modifica]

Exercici 3[modifica]

/*
 * 3. Feu un programa que:
 *
 * 		a) Creï un vector de 10 elements de tipus enter i el carregui amb les
 *      	dades que entri l'usuari.
 * 		b) Mostri en pantalla cada element del vector junt amb el seu quadrat
 *      	i el seu cub.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define DIM 10

int main() {

    int v[DIM];
    int i;

    for (i=0;i<DIM;i++){
        printf("Introdueix el valor de l'element %d del vector:  " ,i+1);
        scanf("%d", &v[i]);
        printf("El valor introduït és: %d, el quadrat és: %d i el cub és: %d\n\n ", v[i], v[i]*v[i], v[i]*v[i]*v[i]);
    }
        return (EXIT_SUCCESS);
}

Exercici 4(1)[modifica]

/*
 * 4. Es vol implementar un programa que simuli el llançament d'un dau 100 vegades.
 *    El programa ha de comptar quantes vegades ha sortit cada número del dau.
 *    Per a realitzar la simulació heu de generar una seqüència de números
 *    aleatoris mitjançant la funció random(). A més, al començament del programa
 *    s'ha d'inicialitzar aquesta seqüència cridant a la funció randomize().
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main() {

    int num, i;
    int cont1;
    int cont2;
    int cont3;
    int cont4;
    int cont5;
    int cont6;

    cont1=0;
    cont2=0;
    cont3=0;
    cont4=0;
    cont5=0;
    cont6=0;

    srandom(time(0));

    for (i=1;i<101;i++){
        num=random()%6+1;

        if(num==1)
            cont1++;
        if(num==2)
            cont2++;
        if(num==3)
            cont3++;
        if(num==4)
            cont4++;
        if(num==5)
            cont5++;
        if(num==6)
            cont6++;

    }

    printf("\nEl numero 1 ha sortit %d vegades", cont1);
    printf("\nEl numero 2 ha sortit %d vegades", cont2);
    printf("\nEl numero 3 ha sortit %d vegades", cont3);
    printf("\nEl numero 4 ha sortit %d vegades", cont4);
    printf("\nEl numero 5 ha sortit %d vegades", cont5);
    printf("\nEl numero 6 ha sortit %d vegades\n\n", cont6);
    

        return (EXIT_SUCCESS);
}

Exercici 4(2)[modifica]

/*
 * 4. Es vol implementar un programa que simuli el llançament d'un dau 100 vegades.
 *    El programa ha de comptar quantes vegades ha sortit cada número del dau.
 *    Per a realitzar la simulació heu de generar una seqüència de números
 *    aleatoris mitjançant la funció random(). AMB VECTORS.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define DIM 100 /*Per a que el màxim sigue 100*/

int main() {

    int i;
    int v[6]={0}; /*Li diem que el dau té 6 cares, i l'inicialitzem a 0 a totes les cares*/

    srandom(time(0));
    
    for (i=1;i<101;i++) /*Inicialitzem en 1, li diem que no sigui mes gran que 100 i l'anem incrementant*/
    {
        v[random()%6]++; /*Les cares del dau*/
    }

    printf("\n\tEl numero 1 ha sortit %d vegades", v[0]);
    printf("\n\tEl numero 2 ha sortit %d vegades", v[1]);
    printf("\n\tEl numero 3 ha sortit %d vegades", v[2]);
    printf("\n\tEl numero 4 ha sortit %d vegades", v[3]);
    printf("\n\tEl numero 5 ha sortit %d vegades", v[4]);
    printf("\n\tEl numero 6 ha sortit %d vegades\n\n", v[5]);
    

        return (EXIT_SUCCESS);
}

Exercici 5[modifica]

/*
 * 5.- Creï un vector de 15 elements de tipus enter i el carregui amb valors
 * aleatoris (funció random()). Calculi la suma i la mitjana dels N primers
 * elements del vector. El valor de N es demanarà a l'usuari i no podrà ser
 * major de 15. Mostri els resultats obtinguts, així com el contingut del vector.
 *
 * 6. Afegeix al programa anterior una funció que mostri tots aquells elements
 * majors que 30 junt amb la posició que ocupen en el vector. Si no hi ha cap
 * ha de mostrar el següent missatge: "No hi ha nombres majors que 30".
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define DIM 15

int main() {

    int i;
    int v[DIM]={0};
    int n;
    int suma=0;
    int xivato=0;

    srandom(time(0)); /**/
    
    for (i=0;i<DIM;i++) /*Omplim el vector de valors aleatoris*/
    {
        v[i]=random()%100;
    }

    printf("\n\tEscriu un valor comprés entre 1 i 15: "); /*Demanem quants llocs del vector volem calcular*/
    scanf("%d", &n); /*Llegim el valor*/

    if(n<15 && n>0){ /*Li diem que el número ha d'estar entre 0 i 15, si nó es així, surt del programa*/
        
        for(i=0;i<n;i++)/*Li diem que recorri un per un els valors del vectors i que els guarde a suma*/
        {
            suma=v[i]+suma;
        }
        printf("\t\n\nEl resultat de la suma segons els valors aleatoris del vector és: %d\n", suma);
        printf("\t\nEl resultat de la mitjana segons els valors aleatoris del vector és: %g\n\n", (float)suma/n); /*Li diem que solament la operació sigui en decimals*/

        for(i=0;i<n;i++)
        {
                printf("\t\nEl contingut del vector era: %d\n", v[i]); /*Li diem que recorri tots els valors del vector i els mostri*/
                if(v[i]>=30){
                     printf("%d és més gran que 30", v[i]);
                     xivato=1;
                }
        }
        if(xivato==0) printf("\n\tNo hi ha números majors que 30!!\n");
        

    }

    else
        printf("\n\t\t¡¡ HE DIT ENTRE 0 I 15 !!\n\n");

    return (EXIT_SUCCESS);
}

Exercicis (cadenes)[modifica]

Exercici 3[modifica]

/*
* 3. Escriviu un programa que llegeixi una paraula i calculi la seva longitud.
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>


int main() {

	char cadena[100];
	int i;

	printf("Escriu una paraula: ");
	scanf("%s", &cadena);

	for(i=0;cadena[i]!=0;i++){
	}

	printf("\n\tLa seva longitud és de %d.\n\n", i);

return (EXIT_SUCCESS);

}

Exercici 4[modifica]

/*
* 4. Escriviu un programa que llegeixi una frase (formada per diverses
*    paraules) i calculi la seva longitud.
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>


int main() {

	char cadena[100];
	int i;

	printf("Escriu un frase: ");
	gets(cadena);

	for(i=0;cadena[i]!=0;i++){
	}

	printf("\n\tLa seva longitud és de %d.\n\n", i);

return (EXIT_SUCCESS);

}

Exercici 5[modifica]

/*
* 5. Escriviu un programa que llegeixi un text (format per diverses línies)
*    i calculi la seva longitud.
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>

#define LONG 100
int mygetchar(void);

int main() {

	char text[LONG];
	int car,i=0;

	printf("Introdueix línies de text (punt per finalitzar): ");

	while(i<LONG-1 && (car=mygetchar())!='.') {
	text[i]=car;
	i++;
	}

	text[i]=0;
	printf("\n\n La longitud de la cadena és %d\n\n", i);
	
return (EXIT_SUCCESS);
}

int mygetchar(void)
{
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
printf("%c",ch);
return ch;
}

Exercici 6[modifica]

/*
* 6. Realitzeu un programa que llegeixi una frase i transformi les lletres
*    majúscules a minúscules i viceversa.
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>
#include <ctype.h>

int main() {

	char cadena[100];
	int i;

	printf("Escriu un frase: ");
	gets(cadena);

	for(i=0;cadena[i]!=0;i++){

				/*Passar de majúscules a minúscules*/
	if(cadena[i]>='A' && cadena[i]<='Z')
		cadena[i] = tolower(cadena[i]);

				/*Passar de minúscules a majúscules*/
	else if(cadena[i]>='a' && cadena[i]<='z')
		cadena[i] = toupper(cadena[i]);
		
	}

	printf("\n\t%s\n\n", cadena);

return (EXIT_SUCCESS);

}

Exercici 7[modifica]

/*
 * 7. Realitzeu un programa que demani una frase i l'escrigui al revés.
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <termios.h>
#include <ctype.h>
#include <string.h>


int main(void){

    int i;
    char cadena[400];
    char invertir[400];

    printf("Escriu una cadena: ");
    gets(cadena);

			//strlen és una funció de cadena que determina la longitud d'una cadena de caràcters.
    for(i=0; i<strlen(cadena); i++)
        invertir[i] = cadena[strlen(cadena)-i-1];
        invertir[i] = '\0';

    printf("\t\n%s", invertir);

    getchar();

return EXIT_SUCCESS;
}

Exercici 8[modifica]

/*
 * 8. Realitzeu un programa que demani frases fins que s'introdueixi la 
 *    frase "fi".
 */

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char car;
    char frase[100];
    char a=0;

    printf ("Ecriu frases (fi) per a finalitzar.\n");

    for (i=0;i<99 && a==0 && (car=getchar());i++)
    {

        frase[i]=car;
        if ((frase[i-3]==' ' ||frase[i-3]=='\n') && frase[i-2]=='f' && frase[i-1]=='i' && frase[i]=='\n')
        a=1;
    }



  return (EXIT_SUCCESS);
}

Exercici 9(1)[modifica]

/*
 * 9. Realitzeu un programa que demani tres frases i les concateni per a
 *    formar una quarta.
 */

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char cadena1[100];
    char cadena2[100];
    char cadena3[100];
    
    /*
     * 1ra frase
     */
    printf ("Ecriu la primera frase: ");
    gets(cadena1);

    for(i=0;cadena1[i]!=0;i++){
    }


    /*
     * 2na frase
     */
    printf ("Ecriu la segona frase: ");
    gets(cadena2);

    for(i=0;cadena2[i]!=0;i++){
    }


    /*
     * 3ra frase
     */
    printf ("Ecriu la tercera frase: ");
    gets(cadena3);

    for(i=0;cadena3[i]!=0;i++){
    }

     /*
     * Mostrem el resultat
     */
    printf("--------------------------------------------------");

    printf("\n\t%s %s %s\n\n",cadena1, cadena2, cadena3);

  return (EXIT_SUCCESS);
}

Exercici 9(2)[modifica]

/*
 * 9. Realitzeu un programa que demani tres frases i les concateni per a
 *    formar una quarta.
 */

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j=0;
    char cadena1[100];
    char cadena2[300];
    
    
    /*
     * 1ra frase
     */
    printf ("Ecriu la primera frase: ");
    gets(cadena1);

    for(i=0;cadena1[i]!=0;i++){
        cadena2[j++]=cadena1[i];
    }

    
    /*
     * 2na frase
     */
    printf ("Ecriu la segona frase: ");
    gets(cadena1);

    for(i=0;cadena1[i]!=0;i++){
        cadena2[j++]=cadena1[i];
    }


    /*
     * 3ra frase
     */
    printf ("Ecriu la tercera frase: ");
    gets(cadena1);

    for(i=0;cadena1[i]!=0;i++){
        cadena2[j++]=cadena1[i];
    }

    cadena2[j]=0;

    
    /*
     * Mostrem el resultat
     */
    printf("--------------------------------------------------");

    printf("\n\t%s\n\n",cadena2);

  return (EXIT_SUCCESS);
}

Altres Exercicis[modifica]

Exercici 1[modifica]

/*
 * La base del triangle donada per l'usuari
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int a;
    int b;
    printf("Introdueix els dos costats del triangle separats per un espai.\n\n");
    scanf("%d %d", &a, &b);
    printf("\nLa base d'aquest triangle amb els costats de %dcm i %dcm val %dcm2.\n\n", a,b,a*b/2);
    return (EXIT_SUCCESS);

}

Exercici 2[modifica]

/*
 * Exercici 12(a) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int y;
    printf("Introdueix dos números\n\n");
    scanf("%d %d", &x, &y);
    printf("\nEl resultat de %d i %d és %d.\n\n", x,y, x/y+1);
    return (EXIT_SUCCESS);

}

Exercici 3[modifica]

/*
 * Exercici 12(b) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int y;
    printf("Introdueix dos números\n\n");
    scanf("%d %d", &x, &y);
    printf("\nEl resultat de %d i %d és %d.\n\n", x,y, (x+y)/(x-y));
    return (EXIT_SUCCESS);

}

Exercici 4[modifica]

/*
 * Exercici 12(c) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int y;
    printf("Introdueix dos números\n\n");
    scanf("%d %d", &x, &y);
    printf("\nEl resultat de %d i %d és %d.\n\n", x,y, (x+y/z)/(x+y/z));
    return (EXIT_SUCCESS);

}

Exercici 5[modifica]

/*
 * Exercici 12(d) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int y;
    int z;
    printf("Introdueix tres números\n\n");
    scanf("%d %d %d", &x, &y, &z);
    printf("\nEl resultat de %d, %d i %d és %d.\n\n", x,y,z, x/(y+z));
    return (EXIT_SUCCESS);

}

Exercici 6[modifica]

/*
 * Exercici 12(e) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int y;
    int z;
    int w;
    printf("Introdueix quatre números\n\n");
    scanf("%d %d %d %d", &x, &y, &z, &w);
    printf("\nEl resultat de %d, %d, %d i %d és %d.\n\n", x,y,z,w, (x+y)*(z/w));
    return (EXIT_SUCCESS);
}

Exercici 7[modifica]

/* 
 * Exercici 12(f) dels apunts
 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    int x;
    int y;
    printf("Introdueix dos números\n\n");
    scanf("%d %d", &x, &y);
    printf("\nEl resultat de %d mes %d elevat a 2 és %f.\n\n", x,y, pow (pow(x+y,2),2);
    return (EXIT_SUCCESS);
}