menu

miércoles, diciembre 28, 2016

Ejercicios 10 en C

1. Introducir una frase por teclado.Imprimirla cinco veces en filas consecutivas, pero cada impresión irá desplazada cuatro columnas hacia la derecha.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
void main()
{
    int c,e,f,h=0;
    char a[255],b[255];
    do
    {
        printf("Introduce una frase: ");
        fgets(a,255,stdin);//Utilizar en vez de gets (variable,nºde_caracteres,stdin que es salida por pantalla)
        a[strlen(a)-1]= 0;// Para quitar el salto de linia fgets siempre lo hace
        f=0;
        for (c=0;c<5;c=++)
        {
            while (e+f<strlen(a))
            {
                printf("%c",a[e+f]);
                e++;
            }
            while(e<strlen(a))
            {
                printf("%c",a[h]);
                e++;
                h++;
            }
            f+=4;
            if(f>=strlen(a))
            {
                f=0;
            }
            e=0;
            h=0;
            printf("\n");
        }
        do
        {
            printf("quieres escribir otra frase, escribe s o n: ");
            fgets(a,255,stdin);//mala idea mezclar scanf y fgets, problemas al hacer bucles, fgets salto de linia
            a[strlen(a)-1]= 0;
        }
        while (strcmp(a,"s") != 0 && strcmp(a,"n") != 0);//strcmp compara
    }
    while(strcmp(a,"n") != 0);
}


2. Simular el lanzamiento de una moneda al aire e imprimir si ha salido cara ó cruz. Repetir el proceso tantas veces como deseemos. --- Para este ejercicio necesitaremos la función random de C. Buscad informacion.
Cuidado esta hecho con linux, random diferente

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main()
{
   char a[255];
   int b;
   printf("Lanzamiento de moneda\n");
   do
   {
        b=random()%2;
        if (b==0)
        {
            printf("Ha salido cara\n");
        }
        else
        {
            printf("Ha salido cruz\n");
        }
        do
        {
            printf("quieres lanzar otra vez la moneda, escribe s o n: ");
            scanf("%s",&a);
        }
        while (strcmp(a,"s") != 0 && strcmp(a,"n") != 0);//strcmp compara dos cadenas si sale 0 es igual
   }
   while(strcmp(a,"n") != 0);
}


3. Introducir dos números por teclado y mediante un menú que calcule su suma , su resta , su multiplicación y su división.

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

float pedir_numero(int contador);
int validar_num(char numero[50]);

void main()
{
    int contador;
    float n1,n2;
    char operacion[50];
    do
    {
        printf("Calculadora introduce dos numeros:\n");
        n1=pedir_numero(contador=1);
        n2=pedir_numero(contador=2);
        printf("Que calculo quiere realizar:\n",n1,n2);
        do
        {
            printf("d=division, m=multiplicación, r=resta, s=suma: ");
            fgets(operacion,50,stdin);
            operacion[strlen(operacion)-1]= 0;
        }
        while(strcmp(operacion,"d") !=0 && strcmp(operacion,"m") !=0 && strcmp(operacion,"r") !=0 && strcmp(operacion,"s") !=0);
        if(strcasecmp(operacion,"d")==0)
        {
            if(n2==0)
            {
                printf("Esta operacion no se puede realizar da infinito");
            }
            else
            {
                printf("%g",n1/n2);
            }
        }
        else if(strcasecmp(operacion,"m")==0)
        {
            printf("%g",n1*n2);
        }
        else if(strcasecmp(operacion,"r")==0)
        {
            printf("%g",n1-n2);
        }
        else
        {
            printf("%g",n1+n2);
        }
        do
        {
            printf("\nQuieres hacer otro calculo, escribe s o n: ");
            fgets(operacion,50,stdin);
            operacion[strlen(operacion)-1]= 0;
        }
        while (strcmp(operacion,"s") != 0 && strcmp(operacion,"n") != 0);
    }
    while(strcmp(operacion,"n") != 0);
}

float pedir_numero(int contador)
{
    int v;
    float convertido;
    char numero[50];
    do
    {
        printf("Introduce el %dº numero: ",contador);
        fgets(numero,50,stdin);
        numero[strlen(numero)-1]= 0;
        v=validar_num(numero);
    }
    while(v!=0);
    convertido= atof(numero);//atof stdlib.h con decimales atoi sin decimales
    return convertido;
}

int validar_num(char numero[50])
{
    int i=0,v=0,coma=0;
    while (i<strlen(numero)&&v==0)
    {
        if (i == 0 && numero[i] == '-' && strlen(numero) >=2)//verificar el numero negativo
        {
            i++;
        }
        else if (numero[i] == '.' && strlen(numero) >=3 && i!= 0 && i!= strlen(numero)-1 && coma == 0)//verificar la coma
        {
            i++;
            coma++;
        }
        else if(isdigit(numero[i])!=0)
        {
            i++;
        }
        else
        {
            v=1;
        }
    }
    return v;
}


4. Simular el lanzamiento de una moneda al aire y que pare cuando salgan 3 caras seguidas. Imprimir el número de tiradas realizadas.

Cuidado esta hecho con linux, random diferente

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main()
{
   char a[255];
   int b,v=0,c;
   printf("Lanzamiento de moneda\n");
   do
   {
        b=random()%2;
        if (b==0)
        {
            printf("Ha salido cara\n");
            c++;
        }
        else
        {
            printf("Ha salido cruz\n");
            c=0;
        }
        if(c==3)
        {
            printf("Han salido tres caras seguidas, el numero de tiradas son: %d\n",v);
            c=0;
            v=0;
        }
        v++;
        do
        {
            printf("quieres lanzar otra vez la moneda, escribe s o n: ");
            scanf("%s",&a);
        }
        while (strcmp(a,"s") != 0 && strcmp(a,"n") != 0);//strcmp compara dos cadenas si sale 0 es igual
   }
   while(strcmp(a,"n") != 0);


}

No hay comentarios:

Publicar un comentario