febrero 26, 2013

EJEMPLO DE EMPLEADOS CON ENTRADA Y SALIDA EN 4 LENGUAJES C, C++, JAVA, PHP


Como programa de ejemplo emplearemos uno que interactúa con el usuario empleando entrada y salida estándar para leer un entero e imprimir el sucesor, en cada uno de los 4 lenguajes. Además de la sintaxis de este programa en cada lenguaje, se presenta la forma de compilar y ejecutar en un ambiente tipo Unix.

C

#include <stdio.h>
   
int
main(int argc, char *argv[])
{
  int k;
  printf("Por favor ingrese un número: ");
  scanf("%i",&k);
  k=k+1;
  printf("El sucesor del número que ingresó es: %i",k);
}
Si el anterior programa se mantiene en un archivo de nombre lee-esc-ent.c, desde la línea de comandos es posible compilarlo a código objeto (lee-esc-ent.o), después encadenarlo en un binario en formato ELF (lee-esc-ent-C) y ejecuta con:
$ cc -c lee-esc-ent.c
$ cc -o lee-esc-ent-C lee-esc-ent.o
$ ./lee-esc-ent-C



C++

#include <iostream>
using namespace std;
   
int
main()
{
        int k;
        cout << "Por favor ingrese un número: ";
        cin >> k;
        k=k+1;
        cout << "El sucesor del número que ingresó es: " << k << "\n";
 return 0;
}
Si el anterior programa se mantiene en un archivo de nombre lee-esc-ent.cpp (note que la extensión típica para programas en C es .c, mientras que para programas en C++ es .cpp), desde la línea de comandos es posible compilarlo a código objeto (lee-esc-ent.o), después encadenarlo en un binario en formato ELF (lee-esc-ent-CPP) y ejecutarlo con:
$ c++ -c lee-esc-ent.cpp
$ c++ -o lee-esc-ent-CPP lee-esc-ent.o
$ ./lee-esc-ent-CPP



PHP

 Por favor ingrese un número:
<?php
        fscanf(STDIN, "%d\n", $k);
        $k=$k+1;
        echo "El sucesor del número que ingresó es: $k\n";
?>
De los cuatro PHP es típicamente interpretado (los otros requieren una compilación prevía). Si el anterior programa se mantiene en un archivo de nombre lee-esc-ent.php (la extensión típica para programas en PHP es .php), desde la línea de comandos es posible interpretarlo con:
$ php lee-esc-ent.php






Java

 import java.io.*;

public class LeeEscEnt {
        public static void main(String args[]) {
                int k;

                System.out.print("Por favor ingrese un número: ");

                try {  
                        k=leeEntero();
                        k=k+1;
                        System.out.println("El sucesor es: "+k);
                }
                catch (IOException ioe) {
                        System.out.println("Error de E/S: " + ioe);
                }
        }

        static int leeEntero() throws IOException {
                int n=0;
                int sgn=1;

                int l=System.in.read();

                while(l!= -1 && (char)l==' ') {
                        l=System.in.read();
                }
                if (l=='-') {
                        sgn=-1;
                } else if (l=='+') {
                        sgn=1;
                }

                while(l != -1 &&  (char)l>='0' && (char)l<='9') {
                        n=n*10+(l-(int)'0');
                        l=System.in.read();
                }

                return n*sgn;
        }

}
Desde la línea de comandos este programa (mantenido en un archivo de nombre LeeEscEnt.java) se compila en bytecode (LeeEscEnt.class) que después puede ser ejecutado con la máquina virtual Java así:
$ export PATH=$PATH:/usr/local/jdk1.3.1-linux/bin/
$ javac LeeEscEnt.java
$ java LeeEscEnt

EJEMPLO TABLAHASH ESTUDIANTES


Programa que guarda los datos de estudiantes tomando como campo clave el carnet del estudiante (ej: PE01091 las 2 inicilaes de los apellidos mas ultimos 2 degitos del año de ingreso mas un correlativo) en estructuras de tablas hash*/

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

//Estructura que contendra cada celda de la tabla guardando los datos del //estudiante que se introduciran
// por medio del teclado
struct infoalumno
{
       char nombre[50];
       char carnet[10];
       char telefono[9];
       char direccion[50];
       int esAlta;
};
typedef struct infoalumno alumno;

//Declaracion de la tabla hash

struct tipotabla
{
       alumno *tabla[size];
       int elementos;
       double factorcarga;/*declaramos un factor de carga puesto que una tabla hash se vuelve ineficiente cuando sobrepasa el 50% */
};
typedef struct tipotabla tabladispersa;

/* Declaracion de funciones*/

void CrearTabla(tabladispersa *);
void insertar(tabladispersa*, alumno);
alumno *buscar(tabladispersa*, char *);
int eliminar(tabladispersa *, char *);
long transforma(char *);
int direccion(tabladispersa *, char *);
void flush();

main()
{
      int op, res, i, p;
      char clave[50];
      alumno datos, *prt;
      tabladispersa tabla[size], n;
      CrearTabla(tabla);
      system("color 05");
      system("cls");
      while(1)
      {
       
        printf("tt°°°°°°°°°°°°°MENU°°°°°°°°°°°°");
        printf("nSeleccione la operacion a realizar:n");
        printf("nt1.Insertar Elementont2.Buscar un elemento");
        printf("nt3-Eliminar un elementont4-Salirnt");
        scanf("%d",&op);
        switch(op)
        {
          case 1:
               system("cls");
               puts("nNombre del estudiante");
               flush();
               gets(datos.nombre);
               puts("nCarnet del estudiante:");
               flush();
               gets(datos.carnet);
               puts("nNo de telefono del estudiante");
               flush();
               gets(datos.telefono);
               puts("nDireccion del estudiante:");
               flush();
               gets(datos.direccion);
       
               p = direccion(tabla , datos.carnet);
               printf("nnLa clave hash generada es: %dn",p);
               puts("nInsercion exitosa!n");
               insertar(tabla, datos);
          break;
          case 2:
               system("cls");
               puts("nIntroduzca el carnet del estudiante que desea buscar");
               flush();
               scanf("%s",&clave);
               prt = buscar(tabla, clave);
               if(prt)
               {
                 system("cls");
                 puts("ntDatos del estudiante:n");
                 printf("nNombre: %sn",prt->nombre);
                 printf("nCarnet %sn",prt->carnet);
                 printf("nNo de telefono %sn",prt->telefono);
                 printf("nDireccion: %sn",prt->direccion);
             
               }
               else
                 puts("nNo existe ese estudiante en este registronn");
          break;
          case 3:
               system("cls");
               puts("nDigite el dato a eliminar de la tabla:");
               flush();
               scanf("%s",&clave);
               i = eliminar(tabla, clave);
               if(i!=1)
               puts("nEliminacion con exiton");
               else
               puts("nError en la eliminacionn");
          break;
          case 4:
               exit(0);
          break;
        }
      }
      getch();
      return 0;
}
/* Crea una tabla hash para trabajar */

void CrearTabla(tabladispersa *t)
{
     int j;
     for(j=0;j<size;j++)
     {
          t->tabla[j] == NULL;
     }
     t->elementos = 0;
     t->factorcarga = 0.0;
}
/* transforma los caracteres de la clave en valores enteros*/
long transforma(char *clave)
{
     int j;
     long d = 0;
     for(j=0;j<strlen(clave);j++)
     {
       d = d * 27 + clave[j];
     }
return ((d>=0) ? d: -d);

/* dirección recibe la tabladispersa y la clave para colocar esta ultima en la tabla*/
}
int direccion(tabladispersa *t, char *clave)
{
    int i=0;
    long p, d;
    d = transforma(clave);
    p = d % size;
    while(t->tabla[p] != NULL && strcmp(t->tabla[p]->carnet, clave) !=0)
    {
      i++;
      p = p + i * i;
      p = p % size;
    }
return (int)p;
}
/* Inserta los datos que representa la clave en la tabla hash*/
void insertar(tabladispersa *t, alumno r)
{
     alumno *pr;
     int posicion;
     pr = (alumno*)malloc(sizeof(alumno));
     strcpy(pr->nombre, r.nombre);
     strcpy(pr->carnet, r.carnet);
     strcpy(pr->telefono, r.telefono);
     strcpy(pr->direccion, r.direccion);
     pr->esAlta = 1;
     posicion = direccion(t, r.carnet);
     t->tabla[posicion] = pr;
     t->elementos++;
     t->factorcarga=(t->elementos)/size;
     if(t->factorcarga > 0.5)
     {
       puts("nFactor de Carga supera el 50% de la tabla");
     }
}
/* Busca el elemento en la tabla e imprime si lo encuentra o no */
alumno *buscar(tabladispersa *t, char *clave)
{
       alumno *pr;
       int posicion;
       posicion = direccion(t, clave);
       pr = t->tabla[posicion];
       if(pr != NULL)
       {
             if(!(pr->esAlta))
             {
                 pr = NULL;
             }
       }
return pr;
}
/* Elimina el elemento de la tabla hash */
int eliminar(tabladispersa *t, char * clave)
{
     int posicion;
     posicion = direccion(t, clave);
     if(t->tabla[posicion] !=NULL)
     {
       t->tabla[posicion] -> esAlta = 0;
     }
     else
       return 1;
}
void flush()
{
     fflush(stdin);
     fflush(stdout);

PROGRAMA CHAR DE FACTORES PRIMOS


Escribir un programa que pida varios números, hasta que el usuario quiera terminar, y los descomponga en factores primos.
No seremos especialmente espléndidos en la optimización, por ejemplo, no es probable que valga la pena probar únicamente con números primos para los divisores, podemos probar con algunos que no lo sean, al menos en este ejercicio no será una gran diferencia.
Piensa un momento en cómo resolverlo e inténtalo, después puedes continuar leyendo.
Lo primero que se nos ocurre, al menos a mi, cuando nos dicen que el programa debe ejecutarse mientras el usuario quiera, es implementar un bucle do..while, la condición de salida será que usuario responda de un modo determinado a cierta pregunta.

En cada iteración del bucle pediremos el número a descomponer y comprobaremos si es divisible entre los números entre 2 y el propio número.

No podemos empezar 1, ya que sabemos que todos los números son divisibles por 1 infinitas veces, por eso empezamos por el 2.

Pero si probamos con todos los números, estaremos intentando dividir por todos los pares entre 2 y el número, y sabremos de antemano que ninguno de ellos es un factor, ya que sólo el 2 es primo y par a la vez, por lo tanto, podemos probar con 2, 3 y a partir de ahí incrementar los factores de dos e dos.
Por otra parte, tampoco necesitamos llegar hasta el factor igual al número, en realidad sólo necesitamos alcanzar la raíz cuadrada del número, ya que ninguno de los números primos entre ese valor y número puede ser un factor de número.

Supongamos que tenemos en número 'n', y que la raíz cuadrada de 'n' es 'r'. Si existe un número 'x' mayor que 'r' que es un factor primo de 'n', por fuerza debe existir un número 'h', menor que 'r', que multiplicado por 'x' sea 'n'. Pero ya hemos probado todos los números por debajo de 'r', de modo que si existe ese número 'h' ya lo hemos extraído como factor de 'n', y si hemos llegado a 'r' sin encontrarlo, es que tampoco existe 'x'.

Por ejemplo, el número 257. Su raíz cuadrada es (aproximada), 16. Es decir, deberíamos probar con 2, 3, 5, 7, 11 y 13 (nuestro programa probará con 2, 3, 5, 7, 9, 11, 13 y 15, pero bueno). Ninguno de esos valores es un factor de 257. El siguiente valor primo a probar sería 17, pero sabemos que el resultado de dividir 257 por 17 es menor que 17, puesto que la raíz cuadrada de 257 es 16.031. Sin embargo ya hemos probado con todos los primos menores de 17, con resultado negativo, así que podemos decir que 17 no es factor de 257, ni tampoco, por la misma razón, ningún número mayor que él.

Ya tenemos dos buenas optimizaciones, veamos cómo queda el programa:


#include <iostream> // biblioteca para uso de cout
using namespace std;

int main()
{
   int numero;
   int factor;
   char resp[12];
 
   do {
      cout << "Introduce un número entero: ";
      cin >> numero;
      factor = 2;
      while(numero >= factor*factor) {
         if(!(numero % factor)) {
            cout << factor << " * ";
            numero = numero / factor;
            continue;
         }
         if(factor == 2) factor++;
         else factor += 2;
      }
      cout << numero << endl;
      cout << "Descomponer otro número?: ";
      cin >> resp;
   } while(resp[0] == 's' || resp[0] == 'S');
   return 0;
}

PROGRAMA DE SECUENCIA DE NUMEROS QUE LLEGUE HASTA 23, DO - WHILE


Esribir programa que de secuencia

1, 5, 3, 7, 5, 9, 7, ..., 23

La secuencia debe detenerse al llegar al 23.
El enunciado es rebuscado, pero ilustra el uso de los bucles do..while.
La secuencia se obtiene partiendo de 1 y sumando y restando 4 y 2, alternativamente. Veamos cómo resolverlo:


// Programa que genera la secuencia:
// 1, 5, 3, 7, 5, 9, 7, ..., 23

#include <iostream> // biblioteca para uso de cout
using namespace std;

int main() // función principal
{
   int i = 1; // variable para bucles
   bool sumar = true; // Siguiente operación es suma o resta
   bool terminado = false; // Condición de fin

   do { // Hacer
      cout << i; // muestra el valor en pantalla
      terminado = (i == 23); // Actualiza condición de fin
      // Puntuación, separadores
      if(terminado) cout << "."; else cout << ", ";
      // Calcula siguiente elemento
      if(sumar) i += 4; else i -= 2;
      sumar = !sumar; // Cambia la siguiente operación
   } while(!terminado); // ... mientras no se termine
   cout << endl; // Cambio de línea

   return 0;
}

PROGRAMA DE DIVISIBLES POR 3 O NO



Escribir un programa que muestre una lista de números del 1 al 20, indicando a la derecha de cada uno si es divisible por 3 o no



#include <iostream> // biblioteca para uso de cout
using namespace std;

int main() // función principal
{
   int i; // variable para bucle

   for(i = 1; i <= 20; i++) // bucle for de 1 a 20
   {
      cout << i; // muestra el número
      if(i % 3 == 0) cout << " es múltiplo de 3"; // resto==0
      else cout << " no es múltiplo de 3"; // resto != 0
      cout << endl; // cambio de línea
   }

   return 0;
}

ARREGLOS EN C++ SIN ELEMENTOS REPETIDOS


Se requiere un programa que al recibir como dato un arreglo unidimensional desordenado de N enteros, obtenga como salida ese mismo arreglo pero sin los elementos repetidos.

#include <iostream>

using namespace std;

//FUNCION QUE VALIDA LA ENTRADA DE ENTEROS
int ingresa_int(char *mensaje){
int num;
bool error;
do{
error = false;
cout << mensaje;
if(!(cin >> num)){
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "ERROR Debes ingresar un numero entero. Por Ejemplo: 4\n";
error = true;
}
}while(error);
return num;
}

//ACCION QUE ELIMINA LOS REPETIDOS DEL ARREGLO
void fuera_repetidos(int *arreglo, int &num){
int i, j, pivot = 0;
bool repetido;
for(i = 0; i < num; i++){
repetido = false;
for(j = 0; j < pivot; j++){
if(arreglo[i] == arreglo[j]){
repetido = true;
break;
}
}
if(!repetido){
arreglo[pivot] = arreglo[i];
pivot++;
}
}
arreglo[pivot+1] = arreglo[num];
num = pivot;
}

//ACCION QUE IMPRIME LOS ELEMENTOS DEL ARREGLO
void imprime(int *ar, int n){
int i;
for(i = 0; i < n; i++){
cout << ar[i];
if(i < n - 1){
cout << ", ";
}else{
cout << ".";
}
if((i != 0 && i%10 == 0) || i == n - 1){
cout << "\n";
}
}
}

//FUNCION PRINCIPAL MAIN
int main(){
int n, i,nvo;
do{
n = ingresa_int("Cuantos elementos tendra el arreglo?\t");
if(n < 1)
cout << "\nERROR! La cantidad de elementos debe ser mayor que 0\n";
}while(n < 1);
int arr[n];
for (i = 0; i < n; i++){
cout << "El entero en la posicion " << i+1;
arr[i] = ingresa_int(" es:\t");
}
cout << "\nEl arreglo tiene los siguientes elementos:\n";
imprime(arr, n);
fuera_repetidos(arr, n);
cout << "\nLuego de eliminar los repetidos, el numero de elementos del arreglo es " << n << " y estos son:\n";
imprime(arr, n);
cin.clear();
cin.ignore(INT_MAX,'\n');
cout << "\nEnter para salir....\n";
getchar();
return 0;
}

EJEMPLO: CONVERSION GRADOS FARENHEIT


Programa que despliega una tabla de conversión de ºC a ºF y viceversa. El programa debe tener una función que pregunte el tipo de conversión deseada. El usuario tecleará "c" o "C" si la conversión va a ser de ºC a ºF y "f" o "F" si la conversión es de ºF a ºC, regresando el caracter leído por medio de return. Otra función preguntará el rango de valores de la tabla y el incremento, recibiendo como parámetros las direcciones de las variables donde se almacenarán esos datos. Otras dos funciones serán para desplegar cada tipo de tabla de conversión.

#include stdio.h
#include ctype.h

 void despliegaFC(int *ran1,int *ran2,int *inc);
 void despliegaCF(int *ran1,int *ran2,int *inc);
 void leeDatos(int *ran1,int *ran2,int *inc);
 char tipoConv(void);

 void main(void){

  int rango1,rango2,incremento;
  char tipo;
   clrscr();
  tipo=tipoConv();
  leeDatos(&rango1,&rango2,&incremento);

    if(tipo=='C'){
    despliegaCF(&rango1,&rango2,&incremento);
   }
     else{
      despliegaFC(&rango1,&rango2,&incremento);
    }
}
  char tipoConv(void){
   char caract;

   printf("       TABLA DE CONVERSION DE GRADOS CENTIGRADOS A GRADOS FARENHEIT");
   printf("\n             Y DE GRADOS FARENHEIT A GRADOS CENTIGRADOS");
   printf("\n\nPara convertir de Centigrados a Farenheit oprime 'C'");
   printf("\npara convertir de Farenheit a Centigrados oprime 'F'");

    printf("\n\nTipo de Conversion (C o F): ");
    caract=toupper(getch());

     return caract;
 }

    void leeDatos(int *ran1,int *ran2,int *inc){

      printf("\n\nValor inicial de la tabla: ");
      scanf("%d",ran1);
      printf("\nValor final de la tabla: ");
      scanf("%d",ran2);

      printf("\n\nIncremento de los valores de la tabla: ");
       scanf("%d",inc);
   }

      void despliegaCF(int *ran1,int *ran2,int *inc){

       int suma=*ran1,incremento=*inc,rango2=*ran2;
       float conversion;

       while(suma<=rango2){

conversion=(((suma)*9)/5)+32;
printf("\n%d §C   -----------------------------  %.1f §F",suma,conversion);

suma=suma+incremento;
     }
getch();
   }

       void despliegaFC(int *ran1,int *ran2,int *inc){

int suma=*ran1,incremento=*inc,rango2=*ran2;
int conversion;

  while(suma<=rango2){

  conversion=((suma-32)*5)/9;
  printf("\n%d §F   -----------------------------  %d §C",suma,conversion);

  suma=suma+incremento;
     }
   getch();
   }

EJEMPLO: ALUMONOS - LEE EN ARREGLOS UNIDIMENCIONALES


Función que lee las matrículas (números enteros) y las calificaciones (tipo char) de los alumnos de un grupo y las almacene en dos arreglos unidimensionales. La función deberá leer los datos hasta que se de una matrícula cero la cual indica el fin de captura. La función regresa el número de alumnos por el mecanismo de return. Después debe de imprimir el contenido de los arreglos.

#include stdio.h

void despliega(int *mats,char *califs,int numcap);
int leedato(int *mats,char *califs,int maximo);

void main(void){
int max=30,matr[29],numalumn;
char calif[29];

 clrscr();

 numalumn=leedato(matr,calif,max);
 printf("\nEl numero de alumnos capturados es %d",numalumn);
 despliega(matr,calif,numalumn);

}
 int leedato(int *mats,char *califs,int maximo){

  int n=0;

  printf("\n   *** Introduce la matricula y su calificacion.  ***");
  printf("\n   *** Para terminar dale un cero a la matricula. ***");

   while(1){

    if(n>=maximo){
    printf("\nEl arreglo se encuentra lleno");
    getch();
    break;
   }
     printf("\n\nMatricula del alumno %d: ",n+1);
     scanf("%d",mats);

      if(*mats==0){
      break;
     }
       printf("\nCalificacion del alumno %d: ",n+1);
       scanf("%d",califs);

       mats++;
       califs++;
       n++;
 }
return n;
}

 void despliega(int *mats,char *califs,int numcap){

   int i=1;

    while(1){

      if(i>numcap){
      break;
     }
       printf("\nLa calificacion del alumno %d es %d",*mats,*califs);
       i++;
       mats++;
       califs++;
   }
        getch();
 }

EJEMPLO: ALUMNOS, LEE REPROBADOS, APROBADOS CON FUNCION EN PARAMETROS


Función que lee calificaciones (0-10) de alumnos y cuente el número de alumnos reprobados, (calif<7) de un conjunto de notas. La función recibe como parámetro el número de notas a leer y deberá regresar el número de alumnos reprobados. Crear un programa que llame a la función anterior y que despliegue el número de alumnos reprobados.

#include stdio.h

int numreprob(int not);

void main(void){
 int notas,reprobados;
 clrscr();

  printf("\nNumero de notas a leer: ");
  scanf("%d",& notas);
  reprobados=numreprob(notas);
  printf("\nExiste un total de %d alumnos reprobados",reprobados);
   getch();
}

  int numreprob(int not){

   int c=1,calif,rep=0;

   while(c<=not){

    printf("\nCalificacion de la nota %d: ",c);
    scanf("%d",&calif);

     if(calif<7){
     rep++;}

      c++;
    }
      return(rep);
 }

EJEMPLO: PROGRAMA ALUMNO - LEE EDADES DE UN GPO Y PROMEDIO,



#include stdio.h

main(){
 int alumnos,edad,counter=1;
 float promedio,sumaedad=0;
 clrscr();

  printf("\nNumero de alumnos: ");
  scanf("%d",&alumnos);

   while(1){

    printf("\nEdad alumno %d: ",counter);
    scanf("%d",&edad);

    sumaedad=sumaedad+edad;
    if(counter==alumnos){
     break;
    }
     counter++;
  }
     promedio=sumaedad/counter;
     printf("\nLa edad promedio de %d alumno(s) es %.1f años",counter,promedio);

      getch();
}

EJEMPLO: PROGRAMA QUE LEE LOS TRES LADOS DE UN TRIANGULO Y DETECTA EL TIPO


#include stdio.h

main(){

 float uno,dos,tres;
 clrscr();

  printf("\nValor del primer lado: ");
  scanf("%f",&uno);

  printf("\nValor del segundo lado: ");
  scanf("%f",&dos);

  printf("\nValor del tercer lado: ");
  scanf("%f",&tres);

    if((uno==dos) && (dos==tres) && (uno==tres))
    printf("\nEl triangulo es equilatero");

    else if((uno!=dos) && (dos!=tres) && (uno!=tres))
    printf("\nEl triangulo es escaleno");

    else
    printf("\nEl triangulo es isoceles");

      getch();
}

EJEMPLO: PROGRAMA QUE USA LAS 4 OPERACIONES FUNDAMENTALES +*/-



#include stdio.h
#include conio.h

void main(){
int prim,seg,resul;
char oper;

clrscr();

 printf("\nPrimer numero: ");
 scanf("%d",&prim);
 printf("\nOperacion a realizar (+,-,*,/): ");
 oper=getche();
 printf("\nSegundo numero: ");
 scanf("%d",&seg);

  if(oper=='+')
  resul=prim+seg;
  if(oper=='-')
  resul=prim-seg;
  if(oper=='*')
  resul=prim*seg;
  if(oper=='/')
  resul=prim/seg;

 printf("\nEl resultado de la operacion %d %c %d es %d",prim,oper,seg,resul);
   getch();
}

EJEMPLO: PROGRAMA QUE CONVIERTE METROS A PIES


#include stdio.h

 main(){
  float metros,resul,pulg;
  int resul2,pulg2;
   clrscr();
 
    printf("\nValor en metros: ");
    scanf("%f",&metros);
    resul=metros*(1/.3048);
     resul2=resul;
     pulg=resul-resul2;
     pulg=pulg*12;
     pulg2=pulg;
     printf("El resultado es: %d pies %d pulgadas",resul2,pulg2);

      getch();
  }

EJEMPLO: PROGRAMA DEL AVION - ARREGLOS CON DEVC

PROBLEMA

Crear un sistema de reservaciones de asientos de avión. Mediante un menú debe de
admitir reservar o cancelar asientos, así como mostrar qué asientos están ocupados y
libres actualmente. Son 3 filas y 6 columnas de asientos. TIP: Utilicen 0’s y 1’s; el 0 indicará
que está vacío y el 1 que está ocupado

SOLUCION


include<stdio.h>
#include<conio.h>
#include<iostream>
using namespace std;
int i,ban,as,op,cont,n,ok;
struct avion
{ int lugar,edo;
char nombre[20],clase[20],apellido[20],tipo[2…
} atleta[40];
void altas()
{system("CLS");
atleta[ban].lugar=ban+1;
cout<<"\n\n\t¿EN QUE CLASE DESEA VIAJAR? ( ALTA o BAJA ): ";
cin>>atleta[ban].clase;
cout<<"\n\n\tINDIQUE TIPO DE VUELO (SIMPLE o REDONDO): ";
cin>>atleta[ban].tipo;
cout<<"\n\n\t¿CUAL ES SU NOMBRE?: ";
cin>>atleta[ban].nombre;
cout<<"\n\n\t¿CUAL ES SU APELLIDO?: ";
cin>>atleta[ban].apellido;
cout<<"\n\n\n\n\tSU NUMERO DE ASIENTO ES EL: "<<atleta[ban].lugar;
atleta[ban].edo=1;
getch();}
void bajas()
{system("CLS");
cout<<"\n\n\t¿QUE ASIENTO DESEA CANCELAR?: ";
cin>>as;
cout<<"\n\tCONFIRMA ELIMINAR ASIENTO DE "<<atleta[as-1].nombre<<" "<<atleta[as-1].apellido;
ok=getch();
if(ok==115||ok==13)
{atleta[as-1].edo=0;
for(i=0;i<20;i++)
{atleta[as-1].clase[i]=32;
atleta[as-1].nombre[i]=32;
atleta[as-1].apellido[i]=32;
atleta[as-1].tipo[i]=32;}}
else
cout<<"\n\tOPERACION CANCELADA ";}
void mostrar()
{system("CLS");
cout<<"¿QUE NUMERO DE ASIENTO DESEA IMPRIMIR?: ";
cin>>as;
if(atleta[as-1].edo==0)
{cout<<"\n\n\t ASIENTO VACIO";
getch();}
else {system("CLS");
cout<<"\n\tAEROLINEA CUI S.A. de C.V.";
cout<<"\n\n\tCLASE: "<<atleta[as-1].clase;
cout<<"\n\n\tPASAJERO: "<<atleta[as-1].nombre<<" "<<atleta[as-1].apellido;
cout<<"\n\n\tDESTINO: TOLUCA-"<<atleta[1].destino;
cout<<"\n\n\tTIPO: "<<atleta[as-1].tipo;
getch(); } }
main()
{cout<<"\n\n\t¿CUAL SERA EL DESTINO DE ESTE VUELO?: ";
cin>>atleta[1].destino;
do{system("CLS");
cout<<"\n\n\t¿QUE OPERACION DESEA REALIZAR?\n\n\n\t 1.- DAR DE ALTA\n\n\t 2.- DAR DE BAJA";
cout<<"\n\n\t 3.- IMPRIMIR UN BOLETO\n\n\t 4.- SALIR\n\n\n\tELIJA UNA OPCION: ";
cin>>op;
cont=0;
for(i=0;i<40;i++)
{if(atleta[i].edo==0)
{ban=i;
i=40;}
else
cont++; }
if(op==1&&cont<40)
altas();
if(op==2)
bajas();
if(op==3)
mostrar();
}while(op!=4); }

DAR DE ALTA, BAJA Y CAMBIOS CON ARREGLOS EN C

Alta en un arreglo (secuencial)

 /* dato es el elemento a dar de alta y pos indica la posición
disponible */

alta(int arr[], int dato, int *pos)
{
 if(*pos == MAX) /* Verifica si esta lleno */
  printf("Error: el arreglo esta lleno");
 else
 {
  arr[*pos] = dato; /* Inserta el dato */
  *pos++;  /* Incrementa la posición */
 }
}






Alta en un arreglo (ordenado)

/* dato es el elemento a dar de alta y cantidad indica el número de
datos existentes. Este procedimiento inserta un dato en un arreglo de enteros 
en orden ascendente */

alta_ordenada(int arr[], int dato, int *cantidad)
{
 int i, pos;

  if(*cantidad == MAX) /* Verifica si esta lleno */  
  printf("Error: el arreglo esta lleno");
 else
 {
  if(*cantidad == 0) /* El arreglo esta vacío */
  {
   arr[0] = dato; /* Inserta el dato */
   *cantidad++; /* Incrementa la cantidad */
  }
  else
  {
   pos = 0;
   for(i=0; i<MAX; i++) /* Busca la posición */
    if(dato >= arr[i]) 
     pos = ++;
   if(pos == *cantidad) /* Es el último */
    arr[pos] = dato; /* Inserta el dato */
   else
   { /* Recorre los datos para hacer espacio para el nuevo*/
    for(i=cantidad; i>=pos; i--)
     arr[i] = arr[i-1];
    arr[pos] = dato; /* Inserta el dato */
    *cantidad++;/* Incrementa cantidad */
   }
  }
 }
}





Baja en un arreglo

Para eliminar un elemento de un arreglo primero se verifica que no esté vacío el arreglo, luego se busca el dato, se elimina y, de ser necesario, se recorren los demás para cubrir el espacio que quedó.

baja(int arr[], int dato, int *cantidad)
{
 int i, pos;
 if(*cantidad == 0) /* Verifica si hay datos */
  printf("Error: el arreglo esta vacío");
 else
 {
  pos = -1; /* Recorre el arreglo buscando dato */
  for(i=0; i<cant;i++)
   if(arr[i] == dato) /* Si lo encontró */
    pos = i;
  if(pos == -1) /* No lo encontró */
   printf("Error: No se encontró el dato %d", dato);
  else
  { /* Recorre los datos eliminando el que se encontraba en pos*/
   for(i=pos; i<*cantidad-1; i++)
    arr[i] = arr[i+1];
   *cantidad--; /* Decrementa cantidad */
  }
 }
}




Cambio

Para modificar un elemento de un arreglo primero se verifica que no esté vacío el arreglo, luego se busca el dato, y se modifica.


cambio(int arr[], int dato, int cantidad, int nuevo)
{
 int i, pos;

  if(cantidad == 0) /* Verifica si hay datos */
  printf("Error: el arreglo esta vacío");
 else
 {
  pos = -1;
  for(i=0; i<MAX;i++) /* Recorre el arreglo buscando dato */
  if(arr[i] == dato) /* Si lo encontró */
   pos = i;
  if(pos == -1) /* No lo encontró */
   printf("Error: No se encontró el dato %d", dato);
  else
   arr[pos] = nuevo;
 }
}



STRING CADENAS, FUNCIONES Y OBJETOS EN C





EJMPLOS DE AGREGACION A CLASES C



EJEMPLOS DE CLASES, SUBCLASES, CONSTRUCTORES Y VECTORES C






INICIO

Pues como a veces no tengo tiempo de apuntar mis clases o darles un flshaso, este blog lo hice pa' cuando tengo problemas en la uni jiji.