martes, 13 de junio de 2017

C, 25. Decimal a binario

// Calculadora decimal a binario (sin recursividad)

#include<stdio.h>

int main(){

    int i=0, n1, a[9999];               // 1) a[x] limita cuantos digitos
                                        // pueden aparecer en el array.
    printf("Decimal: ");                // 2) Pedimos al usuario el no.decimal
    scanf("%i",&n1);                    // se almacena en n1.

    while(n1>0){                        // 3) Mientras n1 sea mayor que 0
        a[i] = n1%2;                    // introducimos en el array n1mod2
        n1 /= 2;                        // almacenamos nuevo valor de n1, n1/2
        ++i;                            // nos desplazamos al siguiente digito
    }
    for(n1=i-1; n1>=0; --n1)            // despues de imprimir:
        printf("Binario: %d",a[n1]);    // 4) La sentencia for esta invertida
    printf("\n");                       // de modo que imprima de dcha a izq.

    return 0;
}


¿Cómo pasar de decimal a binario?

  • Dividimos 35, 34 y 10 entre 2 de forma sucesiva hasta obtener un cociente igual a 1.
  • 35 : 2 = 17 + 1 // 17 : 2 = 8 + 1 // 8 : 2 = 4 + 0 // 4 : 2 = 2 + 0 // 2 : 2 = 1 + 0
  • 34 : 2 = 17 + 0 // 17 : 2 = 8 + 1 // 8 : 2 = 4 + 0 // 4 : 2 = 2 + 0 // 2 : 2 = 1 + 0
  • 10 : 2 = 5 + 0 // 5 : 2 = 2 + 1 // 2 : 2 = 1 + 0
  • Anotamos el último cociente, y a continuación los restos de derecha a izquierda.
  • 35 = 100011 // 34 = 100010 // 10 = 1010
  • Podemos hacer la comprobación con el programa de arriba :)

lunes, 12 de junio de 2017

C, 24. Sentencia do-while

/* Repetición: El bucle do...while

    Sintaxis:

        do{
            Instrucciones
        }while(condicion)    */


// Mostrar los 10 primeros numeros enteros positivos

#include<stdio.h>

int main(){
    int i;                   // Declaramos la variable i
    i=1;                     // Asignamos el valor 1, es el primer número de la serie

    do{
        printf("%i",i);      // Imprimimos en pantalla el valor de la variable i...
        i++;                 // ...en cada iteracion le sumamos 1 a i...
    }while(i<=10);           // ...e imprimimos el valor de i hasta que alcance el
                             // último número.
    return 0;
}

En el primer ejemplo acabamos de ver cómo aplicar do-while, el programa ya tiene las variables por lo que al correrlo simplemente veremos el resultado en pantalla, sin necesidad de interactuar con él.
A continuación otro ejemplo donde el usuario ha de dar los datos para que se ejecute el bucle y concluya.


// Mostrar los numeros enteros entre dos intervalos, ambos inclusive

#include<stdio.h>

int main(){
    int n1,n2;               // Declaramos las variables para el primer y ultimo
                             // numero de la serie, solicitamos al usuario que
                             // que indique sus valores.
    printf("Introduzca el primer numero de la serie:\n");
    scanf("%i",&n1);
    printf("Introduzca el ultimo numero de la serie:\n");
    scanf("%i",&n2);

    do{
        printf("%i ",n1);     // Imprimimos en pantalla el valor de la variable n1
        n1++;                 // en cada iteracion le sumamos 1 a n1
    }while(n1<=n2);           // e imprimimos el valor de n1 hasta que alcance el
                              // valor de n2.
    return 0;
}

En este último ejemplo, en cambio, el programa seguirá ejecutándose mientras el usuario siga realizando la acción que permite reproducir el bucle, en caso contrario finalizará.

// Solicitar repetición de saludo

#include<stdio.h>

int main(){
    char opc;

    do{
        fflush(stdin);                     // Esta funcion limpia la pantalla
        printf("Hola");
        printf("\nIntroduzca 's' para saludar nuevamente: \n");
        scanf("%c",&opc);
    }while(opc == 's' || opc == 'S');      // Mientras el programa siga registrando...
                                           // el caracter "s", nos seguira devolviendo
                                           // ...el saludo inicial.
    return 0;
}

C, 23. Sentencia while


/* La sentencia while

    Sintaxis:

        while(condicion){
            instrucciones;
    } */

// Mostrar los diez primeros números enteros positivos en pantalla en orden ascendente

#include<stdio.h>

int main(){
    int i;

    i=1;                   // A partir de valor 1

    while(i<=10){          // y mientras la variable sea menor o igual a 10
        printf("%i ",i);   // imprimira el valor de la variable
        i++;               // incrementará en 1 su valor en cada iteracion.
    }

    return 0;
}

En el primer ejemplo el programa ya dispone de las variables ya que inicializamos en 1 y le solicitamos al bucle que compruebe la variable cada vez que haga un incremento hasta que llegue a 10. En este caso no se requiere acción por parte el usuario.

En el siguiente ejemplo, en cambio, es el usuario el que ha de proporcionar el valor de los dos números para los cuales va a mostrar todos los enteros que se comprendan entre ellos ambos inclusive; si deseamos que aparezcan en orden ascendente debemos considerar que los incrementos han de ser positivos desde el menor de los números proporcionados, y en descendente el programa deberá hacer decrementos desde el mayor de ambos. El programa dará error si lo los inroducimos en el orden adecuado.

// Mostrar una serie entre dos numeros, ambos inclusive, en
// orden ascendente/descendente.

#include<stdio.h>

int main(){

    int n1,n2;

    printf("Introduzca el primer y el ultimo valor de la serie:\n");
    scanf("%i",&n1);
    scanf("%i",&n2);

    while(n1<=n2){           // Para obtenerlo en orden ascendente
        printf("%i\n",n1);   // mostramos el valor menor
        n1++;                // y le vamos sumando 1 (incremento).
    }

    //while(n2>=n1){         // Para obtenerlo en orden descendente
    //    printf("%i\n",n2); // mostramos el valor mayor
    //    n2--;              // y le vamos restando 1 (decremento).
    //}

    return 0;
}

Siendo más específicos y para evitar errores, si deseamos que aparezcan del primero al segundo de forma estricta, independientemente de si el primero es mayor o menos que el segundo, el programa deberá poder discernir entre ambos, por lo que vamos a introducir primero if-else y después while.

// Mostrar una serie entre dos numeros, ambos inclusive,
// en el orden en que hayan sido introducidos por el usuario.

#include<stdio.h>

int main(){

    int n1,n2;

    printf("Por favor, introduzca el primer y el ultimo valor de la serie:\n");
    scanf("%i %i",&n1,&n2);

    if(n1<n2){                   // De este modo, al ser el primer numero
        while(n1<=n2){           // el menor, apareceran en orden ascendente.
            printf("%i\n",n1);
            n1++;
        }
    }

    // if(n1>n2){                // Lo correcto es incluir la segunda opcion
    //    while(n1>=n2){         // bajo un else, pero de este modo podemos
    //        printf("%i\n",n1); // ver claro que es el supuesto de el 1er
    //        n1--;              // numero mayor que el 2do.
    //    }
    //}

    else{                        // El primero es el mayor, ergo apareceran
        while(n1>=n2){           // en orden descendente.
            printf("%i\n",n1);
            n1--;
        }
    }
    return 0;
}

C, 22. Sentencia if-else

/* Sentencia if de dos alternativas: if-else

    if (Condicion)
        Acción1
    else
        Acción2
*/

//Nota del estudiante

#include<stdio.h>

int main() {
    float nota;

    printf("Introduzca la nota de su examen: \n");
    scanf("%f",&nota);

    if (nota > 4.9) {
        printf("El alumno con nota %.2f esta aprobado\n",nota);
    }
    else {
        printf("El alumno con nota %.2f esta suspendido\n",nota);
    }

    return 0;
}

C, 21. Sentencia switch

/* Sentencia switch()

switch (selector){ //puede ser int o char

case etiqueta1 : sentencias1;break;
case etiqueta2 : sentencias2;break;
case etiqueta3 : sentencias3;break;
default: sentencias;

}*/

//Ejemplo del número

#include<stdio.h>

int main(){
    int numero;

    printf("Introduzca un numero entre (1-3): \n");
    scanf("%i",&numero);

    switch(numero){
        case 1: printf("Es el numero 1");break;
        case 2: printf("Es el numero 2");break;
        case 3: printf("Es el numero 3");break;
        default: printf("El numero es incorrecto");
    }

    return 0;
}

Este ejercicio es parte del curso ProgramaciónATS

domingo, 11 de junio de 2017

C, 20. Sentencia if, Módulo

/* La sentencia if:

    if (Condicion)
        Accion
*/

//Prueba de divisibilidad

#include<stdio.h>

int main () {
    int n1,n2;

    printf("Introduzca dos numeros: \n");
    scanf("%i %i",&n1,&n2);

    if (n1 % n2 == 0){ 

    //% es modulo, vamos a comprobar si el resto es 0, ergo es divisible
     
    printf("El numero %i es divisible por %i\n",n1,n2);}

    //solo se imprimirá el mensaje si se cumple la expresión anterior

    return 0;
}

Este ejercicio es parte del curso ProgramaciónATS

Edit: 29/08/17


/* Función que calcula el valor absoluto de un número */

#include<stdio.h>

int main(){

    int x;             //declarar la variable x
    printf("Introduzca un valor para x: ");
    scanf("%d",&x);

    if(x<0){           //condición
        x=-x;}         //acción, si se cumple
    printf("El valor absoluto de x es %d\n",x);
                       //esta acción es independiente de if
    return 0;

C, 19. Ejemplo if else, gets

/* Ejercicio 19 Condicionales. Ingresar por teclado el nombre y el signo de cualquier persona e imprima el nombre solo si la persona es signo Aries, caso contrario imprima no es signo Aries. */

#include<stdio.h>

int main(){
    char nombre[30],signo[30];

    printf("Introduzca su nombre: \n");
    gets(nombre);
    printf("Introduzca su signo: \n");
    gets(signo);

    if (strcmp(signo,"aries")==0){
        printf("\nEs signo aries, su nombre es: %s",nombre);
    }
    else{
        printf("\nNo es signo aries.");
    }

    return 0;
}

Este ejercicio es parte del curso ProgramaciónATS

#1 Hello world

Buenas a todos,

espero que el blog le pueda estar resultando útil a alguien, hasta ahora apenas he empezado a dedicar tiempo a aprender las bases de C y he de reconocer que lamento no haber empezado antes. Pienso que aprender programación hace unos años me hubiese ayudado en multitud de formas, pero vaya, nunca es tarde para ponerse a ello (y aquí es donde os dejo con la duda al respecto de mi edad).

Por ahora mi experiencia con entornos integrados de desarrollo, IDEs, es bastante reducida, sin embargo ya tengo algún preferido.

  • Uno de ellos es BloodShed Dev C++ para Win10, para los noobs es invaluable lo útil que resulta la combinación de colores de este editor en particular, es fácil de configurar y tiene todo lo necesario a mano; he trabajado con él a través del curso de programación en C de ProgramaciónATS.
  • El otro que he estado utilizando recientemente es CodeLite, por recomendación de Huw Collingbourne para su curso de programación en C para principiantes que se puede encontrar en udemy; es un IDE de libre distribución y multiplataforma.
  • Uno que he encontrado por mi cuenta, y que no está nada mal tener en cuenta cuando estás en un equipo donde no puedes instalar un entorno, es ideone, un IDE online con más de 65 lenguajes disponibles que te permite compilar y descargar el código o acceder a él mediante una url. Aquí os dejo el enlace a un ejemplo de un hello world que he hecho.

#include <stdio.h>

int main(void) {
    printf("Hello world!\n");
    return 0;
}

C, 18. Área trapecio


/* Ejercicio 18. Hacer un programa que calcule áreas de trapecios. */

#include<stdio.h>

int main() {

    int base_M, base_m, altura, area;

    printf("Digite la base mayor: \n");
    scanf("%i",&base_M);
    printf("Digite la base menor: \n");
    scanf("%i",&base_m);
    printf("Digite la altura: \n");
    scanf("%i",&altura);

    area=((base_M+base_m)*altura)/2; //suma de las bases por la altura, partido dos

    printf("El area del trapedio es: %i\n",area);

    return 0;
}

C, 17. Calcular la hipoteusa

/* Ejercicio 17. Hacer un programa que calcule la hipotenusa de un triángulo
a partir del valor de los catetos, redondeando el resultado a las centésimas. */

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

int main(){
    float hipotenusa,cateto1,cateto2;

    printf("Digite el valor de los dos catetos, separados por un espacio: \n");
    scanf("%f %f",&cateto1,&cateto2);

    hipotenusa = sqrt(pow(cateto1,2)+pow(cateto2,2)); 
    //raíz=sqrt(variable), potencia=pow(variable,exponente)

    printf("la hipotenusa del triangulo es: %.2f\n",hipotenusa);

    return 0;
}

C, 16. Aritmética básica


/* Ejercicio 16. Realizar un programa que toma dos valores y los suma, resta, multiplica y divide. */

#include<stdio.h>

int main(){
    printf("hello world\n");

    int n1,n2;
    int suma=0,resta=0,mult=0,div=0;

    printf("Digite 2 numeros separados por un espacio: ");
    scanf("%i %i",&n1,&n2);

    suma=n1+n2;
    resta=n1-n2;
    mult=n1*n2;
    div=n1/n2;

    printf("La suma es: %i\n",suma);
    printf("La resta es: %i\n",resta);
    printf("La mult es %i\n",mult);
    printf("La div es: %i\n",div);

    return 0;
}

C, 15. Comprobación número primo


/* Ejercicio 15 For. Comprobar si un número es primo. */

#include<stdio.h>

int main(){
    int a=0,i,n1;                        // Inicializamos en cero la variable a
                                         // y declaramos i e n1, todos enteros.
    printf("Introduzca un numero: \n");  // Pedimos al usuario el numero a comprobar
    scanf("%i",&n1);                     // el cual se almacena en n1.

    for(i=1; i<(n1+1); i++){             // for(inicializacion, condicion, incremento
        if(n1%i == 0){                   // Mientras n1 mod i sea 0
            a++;                         // incrementamos a en una unidad.
        }
    }                                    // Al finalizar el bucle, si el valor de a
        if(a != 2){                      // es distinto de 2, n1 no es numero primo.
            printf("%i no es numero primo\n",n1);
        }
        else{                            // En caso contrario n1 es numero primo.
            printf("%i es numero primo\n",n1);
        }
    return 0;
}

C, 14. Ejemplo switch

/* Ejercicio 14 Condicionales. Dada una nota de un examen mediante un código escribir el literal que le corresponde a la nota.
A - Excelente
B - Notable
C - Aprobado
D y F - Reprobado */

#include<stdio.h>

int main(){
    char nota;

    printf("Introduzca su nota: \n");
    scanf("%c",&nota);

    switch(nota){
        case 'A': printf("Excelente");break;
        case 'B': printf("Notable");break;
        case 'C': printf("Aprobado");break;
        case 'D':
        case 'F': printf("Reprobado");break;
        default: printf("Nota erronea");break;
    }
    return 0;
}

Este ejercicio es parte del curso ProgramaciónATS

C, 13. Calculo descuentos

/* Ejercicio 13 Condicionales. Una distribuidora de motos tiene una promoción de fin de año que consiste en los siguiente: las motos marca Honda tienen un 5% de descuento, las de marca Yamaha del 8%, las Suzuki del 10%, y el resto del 2%. */

#include<stdio.h>

int main(){
    char marca[20];
    float descuento,precio,precio_final;

    printf("Introduzca la marca que le interesa adquirir: \n");
    gets(marca);
    printf("Introduzca el precio de la moto: \n");
    scanf("%f",&precio);

    if(strcmp(marca,"honda")==0){
        descuento=precio*0.05;
        precio_final=precio-descuento;
        printf("El precio con el descuento es de %.2f euros\n",precio_final);
    }
    else if(strcmp(marca,"yamaha")==0){
        descuento=precio*0.08;
        precio_final=precio-descuento;
        printf("El precio con el descuento es de %.2f euros\n",precio_final);
    }
    else if(strcmp(marca,"suzuki")==0){
        descuento=precio*0.1;
        precio_final=precio-descuento;
        printf("El precio con el descuento es de %.2f euros\n",precio_final);
    }
    else {
        descuento=precio*0.02;  //para el resto de las marcas no determinadas
        precio_final=precio-descuento;
        printf("El precio con el descuento es de %.2f euros\n",precio_final);
    }

    return 0;
}

Este ejercicio es parte del curso ProgramaciónATS

C, 12. Calcular segundos en un espacio de tiempo

/* Ejercicio 12. Calcular la cantidad de segundos que están incluidos en el
número de horas, minutos y segundos ingresados por el usuario. */

#include<stdio.h>

int main(){
    int horas,minutos,segundos,t1,t2,t3,total;

    printf("Digite el numero de horas, minutos y segundos separados por un espacio: \n");
    scanf("%i",&horas,&minutos,&segundos);

    t1=horas*3600; //en una hora hay 3600 segundos
    t2=minutos*60; //en un minuto hay 60 segundos
    t3=segundos*1;
    total=t1+t2+t3;

    printf("El tiempo total en segundos es: %i segundos\n",total);

    return 0;
}

C, 11. Calificación promedio y total


/* Ejercicio 11. Un alumno desea saber cuál será su calificación final
en la materia de Algoritmos. Dicha calificación se compone de los
siguientes porcentajes:
· 55% del promedio de sus tres calificaciones parciales
· 30% de la calificación del examen final
· 15% de la calificación de un trabajo final
Crea un programa que calcule su calificación final. */

#include<stdio.h>

int main() {
    float par1,par2,par3,exa_f,trab_f; //datos obtenidos en scanf
    float promedio_par,p1,p2,p3,calificacion; //datos calculados

    printf("Introduzca los valores de sus tres calificaciones parciales: \n");
    scanf("%f %f %f",&par1,&par2,&par3);
    printf("Introduzca la calificacion del examen final: \n");
    scanf("%f",&exa_f);
    printf("Introduzca la calificacion del trabajo final: \n");
    scanf("%f",&trab_f);

    promedio_par=(par1+par2+par3)/3;
    p1=(promedio_par/100)*55;
    p2=(exa_f/100)*30;
    p3=(trab_f/100)*15;
    calificacion=p1+p2+p3;

    printf("Su calificacion es de %.2f puntos\n",calificacion);

    return 0;
}

C, 10. Borrar pantalla fflush(stdin)

/* Ejercicio 10 Condicionales. Hacer un programa que borre la pantalla al pulsar 1 */

#include<stdio.h>

int main(){
    char tecla;

    printf("Programa de borrado de pantalla");
    printf("\n___________owo !____________\n");
    printf("Digite el numero 1 para limpiar la pantalla: \n");
    scanf("%c",&tecla);

    if(tecla == '1'){
        system("cls");
        printf("Pantalla limpia owo/");
    }
    else{
        fflush(stdin); //limpiar buffer
        printf("Tecla erronea x_x!\n");
        printf("Digite el numero 1 para limpiar la pantalla: \n");
        scanf("%c",&tecla);

        if(tecla == '1'){
            system("cls"); //clear screen
            printf("Pantalla limpia owo/");
        }
        else{
            printf("No ha funcionado T_T");
        }
    }

Este ejercicio es parte del curso ProgramaciónATS

C 09, Calcular aumento porcentaje


/* Ejercicio 09. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre su salario anterior. */

#include<stdio.h>

int main() {
    float salario, aumento, salario_final;

    printf("Introduzca su salario base: \n");
    scanf("%f",&salario);

    aumento=salario*0.25;
    salario_final=salario+aumento;

    printf("Su salario tras el aumento es de %.2f euros",salario_final);

    return 0;
}

C, 08. Calcular salario


/* Ejercicio 08. Dadas las horas trabajadas de una persona y el valor por hora, calcula su salario e imprímelo. */

#include<stdio.h>

int main() {
    int n_horas, valor_hora=5, salario;

    printf("Introduzca el numero de horas trabajadas: \n");
    scanf("%i",&n_horas);

    salario=n_horas*valor_hora;

    printf("Su salario este mes es de %i euros\n",salario);

    return 0;
}

C, 07. Calcular descuento


/* Ejercicio 07. Una tienda ofrece un descuento del %15 sobre el total de la compra, un cliente quiere saber cuánto pagará en total de su compra. */

#include<stdio.h>

int main() {
    float total_compra, descuento, precio;

    printf("Digite el total de la compra: \n");
    scanf("%f",&total_compra);

    descuento=total_compra*0.15;
    precio=total_compra-descuento;

    printf("El precio de la compra tras el descuento del 15x100 es: %.2f euros\n",precio);

    return 0;
}