Mostrando entradas con la etiqueta gcc. Mostrar todas las entradas
Mostrando entradas con la etiqueta gcc. Mostrar todas las entradas

domingo, 13 de marzo de 2022

Katas de programación en C [2da parte]

"Santos remolinos Batman, éste martini tiene un sabor que no logro identificar"

 

En el anterior post realizamos algunos ejercicios de programación en C. En ésta ocasión continuaremos con los ejercicios.

Ejemplo 1. Obtener el número binario de un número decimal mayor a cero.

binario.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAX 100

int main(int argc, char *argv[]){
  char binario[MAX];
  int decimal;
  int residuo;
  char c;
  do{
    puts("Introduce numero decimal:");
    scanf("%d",&decimal);
  }while(decimal <= 0);
  printf("Decimal: %d\n",decimal);

  while(decimal >= 2){
    residuo = decimal % 2;
    decimal = (int) decimal/2;
    c = (char)residuo+'0';
    strcat(binario, &c);
  }
  c = (char)decimal+'0';
  strcat(binario, &c);
  char binarioFinal[MAX];
  int i, j,k;
  for(i=0; binario[i] != '\0'; i++ );
    j=i-1;
    for(k=0; k<=i; k++){
        binarioFinal[k]=binario[j];
        j--;
    }
    printf("Binario final:%s\n",binarioFinal);
  return 0;
}

En éste ejemplo podemos ver la descomposición de un número decimal a su forma binaria (0,1). Obtenemos el residuo de la división (%) y lo vamos almacenando en una cadena string, incluimos el último dígito decimal, para al final mostrar la cadena final (en reversa). Ej. Si el número introducido es 3 deberá mostrar su equivalente en binario que sería: 11.

Compilamos y creamos el ejecutable.

$ gcc binario.c -o ejecutable.exe

$ ./ejecutable.exe

Ejemplo 2. Crear un programa que tome dos números enteros mayores a cero que realice las seis operaciones básicas de la aritmética: suma, resta, multiplicación(producto) , división, potenciación y radicación.

matematicas.c

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

int suma(int,int);
int resta(int,int);
int producto(int,int);
double division(int,int);
double potencia(double, int);
int radicacion(int);

int suma(int a, int b){
  return a+b;
}

int resta(int a, int b){
  return a-b;
}

int producto(int a, int b){
  return a*b;
}

double division(int a,int b){
  return (double) a/b;
}

double potencia(double b, int p){
  int i = 1;
  double pot = 1.0;
  while(i <= p){
    pot = pot * b;
    i++;
  }
  return pot;
}

int radicacion(int a){
  return sqrt((double) a);
}

int main(int argc, char *argv[]){
  int a = 0, b = 0, mySuma = 0, myResta = 0, myProd = 0;
  double myDiv = 0.0, myPot = 0.0;
  do{
    system("clear");
    puts("Introduce dos numeros enteros mayor a cero:");
    printf("a = %d y b = %d\n",a,b);
    scanf("%d %d",&a,&b);
  }while(a <= 0 || b <= 0);
  printf("Numeros introducidos: a=%d y b=%d\n",a,b);
  mySuma = suma(a,b);
  myResta = resta(a,b);
  myProd = producto(a,b);
  myDiv = division(a,b);
  myPot = potencia((double) a,b);
  printf("Suma = %d\n",mySuma);
  printf("Resta = %d\n",myResta);
  printf("Producto = %d\n",myProd);
  printf("Division = %.3lf\n",myDiv);
  printf("Potencia = %.0lf\n",myPot);
  printf("Raiz de  a = %d es: %d\n",a, radicacion(a));
  printf("Raiz de  b = %d es: %d\n",b, radicacion(b));
  return 0;
}

Creamos seis cabeceras y sus implementaciones (funciones) para realizar las operaciones aritméticas básicas. Obligamos a introducir dos número enteros positivos. Si algún número es cero el bucle do-while continuará hasta que los dos números sean mayores a cero.

Para poder compilar y crear el ejecutable (esto si usas GCC):

$ cc matematicas.c -lm -o ejecutable.exe 

Ejemplo 3. Crear un programa que tome tres parámetros, dos decimales y un operador (+, -, x, / , %) para realizar las operaciones de: suma, resta, producto, división y resto/residuo. 

operador.c

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

int operacion(int, int, char);

int operacion(int a, int b, char opc){
  int resultado = 0;
  if(opc == '+'){
    puts("\tSuma");
    resultado = a+b;
  }

  if(opc == '-'){
    puts("\tResta");
    resultado = a-b;
  }

  if(opc =='x'){
    puts("\tProducto");
    resultado = a*b;
  }

  if(opc == '/'){
    puts("\tDivision");
    if(b <= 0){
      resultado = a;
    }else{
      resultado = a/b;
    }
  }

  if(opc == '%'){
    puts("\tResiduo");
    resultado = a%b;
  }
  
  return resultado;
}

int main(int argc, char *argv[]){
  if(argc >= 3){
    int a = atoi(argv[1]);
    int b = atoi(argv[2]);
    char c = argv[3][0]; // tomar el primer caracter de la fila 3, columna 0
    printf("Entrada \t a = %d b = %d , operador: %c\n",a,b,c);
    printf("Resultado: %d\n",operacion(a,b,c));
  }else{
    puts("\tDebes introducir tres argumentos: num1 num2 operador\n");
  }
  return 0;
}

Compilar y ejecutar:

$ gcc operador.c -o ejecutable.exe
$ ./ejecutable.exe 2 3 +
    Suma
Resultado: 5

Enlaces:

http://codemonkeyjunior.blogspot.com/2021/08/vale-la-pena-aprender-c-y-o-c.html

miércoles, 30 de julio de 2014

Programando en C++ ... no. 4

"Siempre programo como si la persona que mantendrá mi código fuera un psicópata que sabe donde vivo."  
::Martin Golding::

 Ejercicios de programación
 1. En este ejemplo vamos a crear y usar un archivo de cabecera (se guardan con la extensión *.h). Ahí escribiremos las variables, constantes y funciones.
//archivo: funciones.h

#ifndef __CABECERA_H
#define __CABECERA_H

#define MAX 3   //podemos crear una variable constante con valor de 3
#define PULSACIONES (e) (220-e)/15  //una función para calcular las pulsaciones de una persona 
using std::cout;
using std::endl;

//también podemos escribir funciones de manea tradicional
void mensaje(){
    cout<<"Este es un simple mensaje"<<endl;
}

#endif /*__CABECERA_H*/

¿Cómo se puede usar?
Creamos un archivo llamado prueba.cpp y declaramos el archivo de cabecera funciones.h.
//archivo:prueba.cpp
#include "funciones.h"
#include "iostream"

using namespace std;

int main(){
    int numeros[MAX];
    numeros[0]=9;
    numeros[1]=21;
    numeros[2]=54; //al tratar de recorrer el vector provoca un bug
    mensaje(); 
   //obtener pulsaciones de una persona de 43 años de edad
    cout<<"Pulsaciones: "<<PULSACIONES(43)<<endl;
   return 0;
}
 
2. Al programar en C++ tenemos la ventaja de la programación funcional y la orientada a objetos, en este ejemplo escribiremos:
  •  Un archivo (funcional.cpp) que usa funciones para obtener el perímetro y área de un circulo
  • Un archivo de cabecera que contendrá las funciones: perimetro() y area()
  • Otro archivo (objeto.cpp) que instancia una clase que posee los métodos para obtener lo mismo
//archivo de cabecera: funciones.h
#ifndef __CABECERA_H
#define __CABECERA_H
#define PI 3.14159

double perimetro(double d){
    return PI*d;
}

double area(double r){
    return PI*(r*r);
}


#endif /*__CABECERA_H*/

//funcional.cpp
#include "iostream"
#include "funciones.h"

using namespace std;
 
int main(){
   double radio=0.0,diametro=0.0;
    cout<<"Introduce radio: ";
    cin>>radio;
    cout<<"Introduce diametro: ";
    cin>>diametro;
    cout<<"diametro: "<<perimetro(diametro)<<" , area: "<<area(radio)<<endl;
  return 0;
}

//objeto.cpp
#include "iostream"

using namespace std;


class Circulo{
private:
    double radio;
    double diametro;
public:
    static const double PI=3.1459;
    Circulo(){cout<<"objeto circulo creado"<<endl;}
    virtual ~Circulo(){cout<<"objeto circulo destruido"<<endl;}
    void setRadio(double r){this->radio=r;}
    double getRadio(){return this->radio;}
    void setDiametro(double d){this->diametro=d;}
    double getDiametro(){return this->diametro;}
    double calc_diametro(){return this->diametro*PI;}
    double calc_area(){return PI*(this->radio*this->radio);}
};


int main(){
    Circulo circulo=Circulo();
    double radio=0.0,diametro=0.0;
    cout<<"Introduce radio: "<<endl;
    cin>>radio;
    cout<<"Introduce diametro: "<<endl;
    cin>>diametro;
    circulo.setRadio(radio);
    circulo.setDiametro(diametro);
    cout<<"diametro: "<<circulo.calc_diametro()<<" , area: "<<circulo.calc_area()<<endl;
    return 0;
}


Esto esto por hoy.

Links
http://foro.elhacker.net/programacion_c/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html


Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog