viernes, 7 de junio de 2013

Proyecto Semaforo Ferroviario


 
 
 
Instituto Tecnológico de Tijuana

Departamento eléctrico y electrónica

Ing. Electrónica

Programación estructurada

Proyecto: Semáforo con arduino

 

Integrantes del equipo:

Carlos Armando Alcántar González

Aldo Flores Ruiz

Marco Aurelio Rosales Gómez

Arturo Villada Segovia

Introducción

Nuestro proyecto consistió en hacer un semáforo en arduino con C++ para evitar accidentes para cuando pase el tren los semáforos se pongan los semáforos en rojo y así los carros tengan que esperar por su propia seguridad ya que no es suficiente con el claxon que el tren por lo tanto nuestro proyecto funciona por medio de un sensor en la que el tren cuando pase en cierta zona por medio de una sombra en el sensor los leds se pongan en rojo .

Justificación

Este proyecto se creó por los accidentes en han sucedido en Tijuana por la falta de  semáforos en la zona de las vías del tren.

Objetivo

Nuestro objetivo consiste en hacer un semáforo por medio de arduino para evitar algún accidente con el tren ya que es necesario que haya semáforos en Tijuana y que así haya una mejor infraestructura de seguridad en las zonas férreas de la ciudad.

Marco Teórico

Por lo que se mencionó anteriormente creemos que hace falta semáforos de trenes en zonas como en el boulevard Díaz Ordaz.  En este proyecto se utilizó una computadora, un arduino, leds, cables, protoboard, un cable usb, como ya teníamos conocimientos en C++ solo faltaba buscar información de las necesidades de la ciudad, se buscó por internet para saber cómo usar el arduino y hacer funcionar el semáforo para el proyecto.


 
ARDUINO

Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de usar.

Arduino puede tomar información del entorno a través de sus pines de entrada de toda una gama de sensores y puede afectar aquello que le rodea controlando luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basasdo en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un ordenador, si bien tienen la posibilidad de hacerlo y comunicar con diferentes tipos de software (p.ej. Flash, Processing, MaxMSP).

 

PROTOBOARD

El "protoboard","breadboard" (en inglés)o "placa board" es un tablero con orificios conectados eléctricamente entre sí, habitualmente siguiendo patrones de líneas, en el cual se pueden insertar componentes electrónicos y cables para el armado y prototipado de circuitos electrónicos y sistemas similares. Está hecho de dos materiales, un aislante, generalmente un plástico, y un conductor que conecta los diversos orificios entre sí. Uno de sus usos principales es la creación y comprobación de prototipos de circuitos electrónicos antes de llegar a la impresión mecánica del circuito en sistemas de producción comercial.

 

LED

Led se refiere a un componente optoelectrónico pasivo, más concretamente, un diodo que emite luz.

 

RESISTENCIA

Se le llama resistencia eléctrica a la mayor o menor oposición que tienen los electrones para desplazarse a través de un conductor. La unidad de resistencia en el sistema internacional es el ohm, que se representa con la letra griega omega (Ω), en honor al físico alemán George Ohm, quien descubrió el principio que ahora lleva su nombre.

 

FOTORESISTENCIA

Una fotorresistencia es un componente electrónico cuya resistencia disminuye con el aumento de intensidad de luz incidente. Puede también ser llamado fotorresistor, fotoconductor, célula fotoeléctrica o resistor dependiente de la luz, cuya siglas, LDR, se originan de su nombre en inglés light-dependent resistor. Su cuerpo está formado por una célula o celda y dos patillas.

 

 

 

 

Desarrollo del proyecto

Se consiguió el arduino prestado por la Profesora Colunga, los materiales como los leds, el protoboard y los cables ya los tenía el compañero Arturo y los demás investigamos cómo y en que se podía emplear nuestro proyecto para así poder hacer el semáforo.

 

Análisis de datos

Preguntamos a la gente que opinaban sobre las vías del tren en ciertos lugares de Tijuana, y mucha gente nos contestó que se necesita un semáforo ya que hay mucho ruido o hay personas que son sordas y por lo tanto necesita alguna señal visual para seguir o no seguir en estas zonas.

 

Solución del proyecto

La solución del proyecto consiste en crear un programa en el lenguaje utilizado para arduino que es similar al utilizado en C++ entre otros y creando un circuito eléctrico correspondiente al código para crear un semáforo ferroviario así cuando el tren o ferrocarril este cerca del cruce donde estará el semáforo las lucen se pongan amarillas y posteriormente se pondrán rojas para impedir el paso a los automovilistas y así evitar accidentes y la mejor circulación de vehículos y los ferrocarriles no se retrasen.

 

 

Codificación

int lightPin = 0;  //define a pin=0 por Photo resistor

void setup()

{

//------------------------------------------

    pinMode(13, OUTPUT);    //LED verde 1

    pinMode(12, OUTPUT);    //LED amarillo 1

    pinMode(11, OUTPUT);    //LED rojo 1

    pinMode(10, OUTPUT);    //LED verde 2

    pinMode(9, OUTPUT);     //LED amarillo 2

    pinMode(8, OUTPUT);     //LED rojo 2  

//------------------------------------------

}

 

void loop()

{

    int lectura = analogRead(lightPin);

    if(lectura > 500)

    {

digitalWrite(13,HIGH);   //en alto pin13

digitalWrite(8,HIGH);     //en alto pin8

delay(5000);                      //retardo de un segundo

digitalWrite(13,LOW);   //en bajo salida pin 13

delay(1000);                      //retardo de un segundo

                                               //Primer parpadeo semaforo 2

digitalWrite(13,HIGH);  //en alto pin 13

delay(1000);                  //retardo de un segundo

digitalWrite(13,LOW);   //en bajo pin 13

delay(1000);            //retardo de un segundo

                                               //segundo parpadeo semaforo 2

digitalWrite(13,HIGH);  //en alto pin 13

delay(1000);            //retardo de un segundo

digitalWrite(13,LOW);   //en bajo pin 13

delay(1000);            //retardo de un segundo

                                               //tercer parpadeosemafro 2

digitalWrite(13,HIGH);  //en alto pin 13

delay(1000);            //retardo de un segundo

digitalWrite(13,LOW);   //en bajo pin 13

delay(1000);            //retardo de un segundo

                                               //LED AMARILLO

digitalWrite(12,HIGH);  //en alto salida pin 12

delay(3000);                      //retardo de 3 segundos

 

digitalWrite(12,LOW);   //en bajo salida pin 12

digitalWrite(8,LOW);      //en bajo salida pin 8

digitalWrite(11,HIGH);  //en alto salida pin 11

digitalWrite(10,HIGH);  //en alto salida pin10

delay(5000);                      //retardo de 5 segundos

digitalWrite(10,LOW);   //en bajo salida pin 10

delay(1000);                      //retardo de un segundo

 

                                               //Primer parpadeo semaforo 2

digitalWrite(10,HIGH);  //en alto pin 10

delay(1000);            //retardo de un segundo

digitalWrite(10,LOW);   //en bajo pin 10

delay(1000);            //retardo de un segundo

                                               //segundo parpadeo semaforo 2

digitalWrite(10,HIGH);  //en alto pin 10

delay(1000);            //retardo de un segundo

digitalWrite(10,LOW);   //en bajo pin 10

delay(1000);            //retardo de un segundo

                                               //tercer parpadeosemafro 2

digitalWrite(10,HIGH);  //en alto pin 10

delay(1000);            //retardo de un segundo

digitalWrite(10,LOW);   //en bajo pin 10

delay(1000);            //retardo de un segundo

                                               //LED AMARILLO 2

digitalWrite(9,HIGH);     //en alto salida pin 9

delay(3000);                      //retardo de 3 segundos

digitalWrite(9,LOW);      //en bajo salida pin 9

digitalWrite(11,LOW);   //en bajo salida pin 11

    }

 

    else  if(lectura < 400)

    {

      digitalWrite(11, HIGH);

      digitalWrite(8, HIGH);     

    }

    else if(lectura > 400 && lectura < 500)

    {

      digitalWrite(9, HIGH);

      digitalWrite(12, HIGH);

    }}

 

 

Ejecución del programa

 

 


Circuito

En un rango de 0 a 600;


Cuando la iluminación es mayor a 500 el semáforo opera normalmente

 


Cuando la iluminación es menor a 400 los semáforos estarán en rojo.
 
 





Conclusión

 

Creemos que este proyecto sería muy importante para la ciudad debido a que falta una mejor infraestructura y que no hay suficiente señales para la gente que utiliza algún medio de transporte en la ciudad.

Por parte del software y hardware utilizados podemos decir que fue entretenido usarlo aunque no tuvimos clases de programación antes de ingresar a la carrera aprendimos lo suficiente para crear este pequeño proyecto que podría operar en esta ciudad de Tijuana, el software fue muy fácil de programar por lo que no se necesita tanto conocimiento aunque en algunas partes del programa si fue un poco complicado  pero es solo cuestión de practicar para seguir avanzando en la creación de nuevos proyectos.

 

 

Glosario

 

Arduino: Es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

 


Leds: Se refiere a un componente optoelectrónico pasivo, más concretamente, un diodo que emite luz.

  

Protoboard: Es un tablero con orificios conectados eléctricamente entre sí, habitualmente siguiendo patrones de líneas, en el cual se pueden insertar componentes electrónicos y cables para el armado y prototipado de circuitos electrónicos y sistemas similares.
 

 

Fuentes:

 

es.wikipedia.org/

www.youtube.com/?gl=MX&hl=es-419‎

www.rincondelvago.com/‎

Practica 7

Instituto Tecnológico de Tijuana
Ingeniería Electrónica
Programación Estructurada
Villada segovia Arturo 12211249
 

 
 


 
Problema 1-A


#include <conio.h>
#include <fstream.h>
void file_empleado()
{
ofstream f1;
ofstream dup;
char archivo_original[40];
char archdup[40];
cout<<" Introducela ruta y nombre del archivo original (ejemplo, c://Datos//empleado.dat): ";
cin.getline(archivo_original,40,'\n');
cout<<" Introducela ruta y nombre del archivo original (ejemplo, c://Datos//empleado.dat): ";
cin.getline(archdup,40,'\n');
f1.open(archivo_original,ios::app);
dup.open(archdup,ios::app);
char nombre[15],sigue,tipo;
int numemp;
float pago;
char fecha[8];
do
{
cout<<" Nombre empleado: ";
cin.ignore();
cin.getline(nombre,15,'\n');
cout<<" Categoria: ";
cin>>tipo;
cout<<" Numero empleado: ";
cin>>numemp;
cout<<" Pago por hora: ";
cin>>pago;
cout<<" Fecha ingreso mes/dia/anio: ";
cin>>fecha;
f1<<nombre<<" "<<tipo<<" "<<numemp<<" "<<pago<<" "<<fecha<<endl;
dup<<nombre<<" "<<tipo<<" "<<numemp<<" "<<pago<<" "<<fecha<<endl;
cout<<"\n\n Desea procesar otro empleado (s/n): ";
cin>>sigue;
}
while (sigue=='s'||sigue=='S');
f1.close();
}
void mostrar_archivo()
{
ifstream f2;
char nombre[15],tipo;
int numemp;
float pago;
char fecha[8];
f2.open("F://Datos//empleados.dat");
cout<<" Listado de empleados\n\n";
cout<<" Nombre Empleado Categoria No. Empleado Pago por Hora Fecha Ingreso \n\n";
f2>>nombre>>tipo>>numemp>>pago>>fecha;
do
{
cout<<nombre<<"\t\t\t"<<tipo<<"\t"<<numemp<<"\t"<<pago<<"\t\t"<<fecha<<endl;
f2>>nombre>>tipo>>numemp>>pago>>fecha;
}
while(!f2.eof());
getch();
}
int menu()
{
int opcion;
cout<<" 1) Alta empleado"<<endl;
cout<<" 2) Desplegar datos archivo empleado"<<endl;
cout<<" 3) Salida programa"<<endl;
cout<<" Seleccione opcion ==>";
cin>>opcion;
return opcion;
}
void main()
{
int opc;
do
{
clrscr();
opc=menu();
switch(opc)
{
case 1:file_empleado();
       break;
case 2:mostrar_archivo();
       break;
case 3:
       clrscr();
       cout<<"\n\n Salida del programa\n\n";
       break;
default:
cout<<" Error en opcion\n\n";
}}
while(opc!=3);
}       getch();





--------------------------------------------------------------------------------------------------------------------------


Problema 1-B-C

#include <conio.h>
#include <fstream.h>
void file_empleado(char archivo_original[40],char archdup[40])
{
ofstream f1;
ofstream dup;
f1.open(archivo_original);
dup.open(archdup);
char nombre[15],sigue,tipo;
int numemp;
float pago;
char fecha[8];
do
{
cout<<" Nombre empleado: ";
cin.ignore();
cin.getline(nombre,15,'\n');
cout<<" Categoria: ";
cin>>tipo;
cout<<" Numero empleado: ";
cin>>numemp;
cout<<" Pago por hora: ";
cin>>pago;
cout<<" Fecha mes/dia/anio: ";
cin>>fecha;
f1<<nombre<<" "<<tipo<<" "<<numemp<<" "<<pago<<" "<<fecha<<endl;
dup<<nombre<<" "<<tipo<<" "<<numemp<<" "<<pago<<" "<<fecha<<endl;
cout<<"\n\n Desea procesar otro empleado (s/n): ";
cin>>sigue;
}
while (sigue=='s'||sigue=='S');
f1.close();
}
void mostrar_archivo(char archivo_original[40])
{
ifstream f2;
char nombre[15],tipo;
int numemp;
float pago;
char fecha[8];
f2.open(archivo_original);
cout<<" Listado de empleados\n\n";
cout<<" Nombre Empleado Categoria No. Empleado Pago por Hora Fecha\n\n";
f2>>nombre>>tipo>>numemp>>pago>>fecha;
do
{
cout<<nombre<<"\t\t\t"<<tipo<<"\t"<<numemp<<"\t"<<pago<<"\t\t"<<fecha<<endl;
f2>>nombre>>tipo>>numemp>>pago>>fecha;
}
while(!f2.eof());
getch();
}
int menu()
{
int opcion;
cout<<" 1) Alta empleado"<<endl;
cout<<" 2) Desplegar datos archivo empleado"<<endl;
cout<<" 3) Salida programa"<<endl;
cout<<" Seleccione opcion ==>";
cin>>opcion;
return opcion;
}
void main()
{
int opc;
char archori[40];
char archduplicado[40];
cout<<" Introducela ruta y nombre del archivo original (ejemplo, c://Datos//empleado.dat): ";
cin.getline(archori,40,'\n');
cout<<" Introducela ruta y nombre del archivo original (ejemplo, c://Datos//empleado.dat): ";
cin.getline(archduplicado,40,'\n');
do
{
clrscr();
opc=menu();
switch(opc)
{
case 1:file_empleado(archori,archduplicado);
       break;
case 2:mostrar_archivo(archori);
       break;
case 3:
       clrscr();
       cout<<"\n\n Salida del programa\n\n";
       break;
default:
cout<<" Error en opcion\n\n";
}}
while(opc!=3);
}       getch();





--------------------------------------------------------------------------------------------------------------------------

 
Problema 2-A-B

#include <conio.h>
#include <fstream.h>
void datos_a_file()
{
ofstream p1;
p1.open("F://Datos//punos.txt");
p1<<6.3<<" "<<8.2<<" "<<18.25<<" "<<24.32<<endl;
p1<<4.0<<" "<<4.0<<" "<<10.0<<" "<<-5.0<<endl;
p1<<-2.0<<" "<<5.0<<" "<<4.0<<" "<<5.0<<endl;
p1.close();
}
void calculo()
{
ifstream p3;
p3.open("F://Datos//punos.txt");
float x1,y1,x2,y2,pendiente,pmx,pmy;
p3>>x1>>y1>>x2>>y2;
while(!p3.eof())
{
pendiente=(y2-y1)/(x2-x1);
pmx=(x1+x2)/2;
pmy=(y1+y2)/2;
cout<<"x1= "<<x1<<"\t"<<"y1= "<<y1<<endl;
cout<<"x2= "<<x2<<"\t"<<"y2= "<<y2<<endl;
cout<<"\nLa pendiente es: "<<pendiente<<endl;
cout<<"\Punto medio de x: "<<pmx<<endl;
cout<<"\Punto medio de y: "<<pmy<<endl;
p3>>x1>>y1>>x2>>y2;
cout<<endl<<endl;
}}
void main()
{
datos_a_file();
calculo();
getch();
}



--------------------------------------------------------------------------------------------------------------------------


Problema 3-A-B

#include <fstream.h>
void inicia_file()
{
ofstream p1;
p1.open("F://Datos//polar.dat");
p1<<2.0<<" "<<45.0<<endl;
p1<<6.0<<" "<<30.0<<endl;
p1<<10.0<<" "<<45.0<<endl;
p1<<4.0<<" "<<60.0<<endl;
p1<<12.0<<" "<<55.0<<endl;
p1<<8.0<<" "<<15.0<<endl;
p1.close();
}
void agrega_datos_file()
{
ifstream p1;
p1.open("F://Datos//polar.dat",ios::app);
float distancia, angulo;
char sigue;
do
{
cout<<"Distancia: ";
cin>>distancia;
cout<<"Angulo: ";
cin>>angulo;
p1>>distancia>>angulo;
cout<<"\n\nDeseas registrar otro dato? (s/n): ";
cin>>sigue;
}
while(sigue=='S'||sigue=='s');
}
void main()
{
inicia_file();
agrega_datos_file();
}


--------------------------------------------------------------------------------------------------------------------------


Problema 3-C

Ejercicio en clase 16 de mayo del 2013

Instituto Tecnológico de Tijuana
Ingeniería Electrónica
Programación Estructurada
Vilada Segovia Arturo

 

#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <conio.h>
void salida_datos_file()
{
ofstream salida;
salida.open("C://Datos//nombres.txt",ios::app);
int i,n;
char name[30];
cout<<" Cuantos nombres desea almacenar: ";
cin>>n;
for(i=1;i<=n;i++)
{
cout<<"\n\nNombre =? ";
gets (name);
salida<<name<<endl;
}
salida.close();
}
void entrada_datos_file()
{
ifstream entrada;
entrada.open("C://Datos//nombres.txt");
char name[30];
cout<<"\Listado de nombre\n";
entrada.getline(name,30);
cout<<name<<endl;
while(!entrada.eof())
{
entrada.getline(name,30);
cout<<name<<endl;
}
entrada.close();
}
int main ()
{
char continuar;
do
{
salida_datos_file();
cout<<"\nDeseas registrar otro nombre (s/n) ==>";
cin>>continuar;
}
while(continuar=='s'||continuar=='S');
entrada_datos_file();
getch();
}

sábado, 1 de junio de 2013

Ejercicio en clase 28 de mayo del 2013

Instituto Tecnológico de Tijuana
Ingeniería Electrónica
Programación Estructurada
Vilada Segovia Arturo



 

//Este programa toma como referencia
//  Pdf Ing. Bruno Lopez T.  Manejo de archivos
// en  Lenguaje C++
//Instituto Tecnológico de Nuevo Laredo


#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdio.h>
#include <ctype.h>
struct producto
{
int noAlumno;
char descrip[40];
int carrera;
int semestre;
};
producto Registro;
FILE *alias;
void ALTA_SECUENCIAL();
void CONSULTA_SECUENCIAL(void);
void LISTADO_SECUENCIAL(void);
void MODIFICACION_SECUENCIAL(void);
void BAJA_LOGICA_SECUENCIAL(void);
void BAJA_FISICA_SECUENCIAL(void);
int menu();
int main()
{
 int opc;
  do
  {
  clrscr();
  opc=menu();
  switch(opc)
  {
  case 1:
      ALTA_SECUENCIAL();
        break;
  case 2:
      CONSULTA_SECUENCIAL();
         break;
  case 3:
     LISTADO_SECUENCIAL();
         break;
  case 4: MODIFICACION_SECUENCIAL();
     break;
  case 5 :  BAJA_LOGICA_SECUENCIAL();
      break;
  case 6:    BAJA_FISICA_SECUENCIAL();
      break;
  case 7: cout<<"\n\nFinal programa ";
     break;
  default: cout<<"\nError en opcion"<<endl;
  }
  }
  while(opc !=7);
  getch();
  return 0;
  }
void ALTA_SECUENCIAL()

{
int no_Alumno; // Variable local para el numero de producto
clrscr();
cout << "\n\rALTAS DE REGISTROS DE ALUMNOS";
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
// en modo de lectura/escritura
if(alias==NULL)
alias=fopen("c:\\datos\\PRODUCTO.SEC","wb"); // Crea el archivo en caso de no
// existir
cout << "\n\n\n\rNo. control: "; cin >> no_Alumno;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
// archivo
{
if(Registro.noAlumno==no_Alumno)
{
cout << "\n\n\n\rRegistro duplicado !!!";
fclose(alias);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rAlumno: "; gets(Registro.descrip);
cout << "\n\rCarrera: "; cin >> Registro.semestre;


cout << "\n\rSemestre: "; cin >> Registro.carrera;
Registro.noAlumno=no_Alumno;
fwrite(&Registro,sizeof(Registro),1,alias); // Grabar el Registro
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rAlumno registrado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
void CONSULTA_SECUENCIAL(void)
{
int no_prod;
clrscr();
cout << "\n\rCONSULTA DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de control: "; cin >> no_prod;
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias))
{
if(Registro.noAlumno==no_prod)
{
cout << "\n\rNo control Alumno Carrera Semestre ";
cout << "\n\r----------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
fclose(alias);
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
void LISTADO_SECUENCIAL(void)
{
clrscr();
cout << "\n\rLISTADO DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\rNo Control Alumno Carrera Semestre ";
cout << "\n\r-------------------------------------------------------------------\n\n";
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
//archivo
{
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
fread(&Registro,sizeof(Registro),1,alias);
}
fclose(alias); // Cierra el archivo
cout << "\n\r------------------------------------------------------------------\n\n";
cout << "\n\rFin del listado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
int menu()
{
int opcion;
cout<<"\n\n1)Alta del alumno "<<endl;
cout<<"\n2)Consulta de alumno"<<endl;
cout<<"\n3)Listado de alumno"<<endl;
cout<<"\n4)Modificar datos de alumno"<<endl;
cout<<"\n5)Baja Logica de alumonos"<<endl;
cout<<"\n6)Baja Fisica de alumnos"<<endl;
cout<<"\n7)Salida Programa"<<endl;
cout<<"\n\nSelecciona opcion = ?  ";
cin>>opcion;
return opcion;
}
void MODIFICACION_SECUENCIAL(void)
{
int no_prod; // Variable local para el numero de producto que desea
//modificar
clrscr();
cout << "\n\rMODIFICACION DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de control: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
//archivo
{
if(Registro.noAlumno==no_prod)
{
cout << "\n\rNo Control Alumno Carrera Semestre \n\n";
cout << "\n\r--------------------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
cout << "\n\n\n\rAnote los nuevos datos ...";
cout << "\n\rAlumno: "; gets(Registro.descrip);
cout << "\n\rCarrera: "; cin >> Registro.semestre;
cout << "\n\rSemestre: "; cin >> Registro.carrera;
// Es necesario reposicionar el apuntador del archivo al principio
//del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra
// el apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
// con los nuevos campos
fclose(alias); // Cierra el archivo
cout << "\n\n\n\rRegistro modificado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
void BAJA_LOGICA_SECUENCIAL(void)
{
int no_prod; // Variable local para el nombre del alumno
//eliminar
char op; //Variable local
clrscr();
cout << "\n\rBAJAS LOGICAS DE REGISTROS DE ALUMNOS";
alias=fopen("c:\\datos\\PRODUCTO.SEC","rb+"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de lectura/escritura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rNumero de control: "; cin >> no_prod;
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del
//archivo
{
if(Registro.noAlumno==no_prod)
{
cout << "\n\rNo Control Alumno Carrera Semestre "<<endl;
cout<< "\n\r---------------------------------------------------------------\n\n";
cout<<Registro.noAlumno<<setw(20)<<Registro.descrip<<setw(10)<<Registro.semestre<<setw(10)<<Registro.carrera<<endl;
Registro.noAlumno=0;
strcpy(Registro.descrip,"");
Registro.semestre;
Registro.carrera;
do {
cout <<"\n\n\rEsta seguro que desea borrarlo? [S/N] ---> ";
op=toupper(getche());
}while(op!='S' && op!='N');
if(op=='S')
{
// Es necesario reposicionar el apuntador del archivo al principio del
// registro que desea modificar, ya que al leer un registro, el
// apuntador se posiciona en el registro siguiente
// La funcion ftell(alias) devuelve la posicion donde se encuentra
// el apuntador
fseek(alias,ftell(alias)-sizeof(Registro),SEEK_SET);
fwrite(&Registro,sizeof(Registro),1,alias); // Graba el registro
// con los nuevos campos
cout << "\n\n\n\rRegistro eliminado !!!";
}
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
fread(&Registro,sizeof(Registro),1,alias);
}
cout << "\n\rNo se encuentra ese registro !!!";
fclose(alias); // Cierra el archivo
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
void BAJA_FISICA_SECUENCIAL(void)
{
FILE *temporal; //Declaracion local de una variable para controlar el
// archivo temporal
clrscr();
cout << "\n\rBAJAS FISICAS DE REGISTROS DE PRODUCTOS";
alias=fopen("C:\\datos\\PRODUCTO.SEC","rb"); // Intenta abrir el archivo
//PRODUCTO.SEC
// en modo de solo lectura
if(alias==NULL) // Valida la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}
temporal=fopen("C:\\datos\\TEMPORAL.TMP","wb"); // Crea el archivo TEMPORAL.TMP
fread(&Registro,sizeof(Registro),1,alias);
// Lee el "Registro", de tamano=sizeof(Registro) del archivo "alias"
while(!feof(alias)) // Ciclo mientras no se encuentre el final del archivo
{
if(Registro.noAlumno!=0)
fwrite(&Registro,sizeof(Registro),1,temporal);
// Graba el registro valido en el archivo temporal
fread(&Registro,sizeof(Registro),1,alias);
}
fcloseall(); // Cierra todos los archivos abiertos
remove("C:\\datos\\PRODUCTO.SEC"); //Elimina el archivo original
rename("C:\\datos\\TEMPORAL.TMP","C:\\datos\\PRODUCTO.SEC");
//Renombra el archivo temporal con el nombre del archivo original
cout << "\n\n\n\rArchivo compactado !!!";
cout << "\n\r<<< Oprima cualquier tecla para continuar >>>";
getch();
return;
}


jueves, 23 de mayo de 2013

Practica unidad 6

Integrantes del equipo:
 
 
Alcantar Gonzales Carlos Armando 12212100
Flores Ruiz Aldo 12211255
Rosales Gomez Marco Aureloio 12211245
Villada Segovia Arturo 12211249
 
--------------------------------------------------------------------------------------------------------------------------

Problema 1

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
template <class T>
void lecturadatos(T a[10][10], int n, int m);
template <class T>
void desplegardatos(T a[10][10], int n, int m);
template <class T>
void sumaarreglos(T a[10][10], T b[10][10], T c[10][10], int n, int m);
template <class T>
void multarreglos(T a[10][10], T b[10][10], T c[10][10], int n, int m);
int main ()
{
float primero[10][10], segundo[10][10], tercero[10][10], tercer[10][10];
lecturadatos(primero,4,4);
cout<<endl<<endl;
lecturadatos(segundo,4,4);
sumaarreglos(primero,segundo,tercero,4,4);
multarreglos(primero,segundo,tercer,4,4);
cout<<"Las matrices originales son \n\n ";
cout<<"La matriz primero\n ";
desplegardatos(primero,4,4);
cout<<endl<<endl;
cout<<"La matriz segundo\n ";
desplegardatos(segundo,4,4);
cout<<"\n\nLa suma de los arreglos es\n\n ";
desplegardatos(tercero,4,4);
cout<<"\n\nLa multiplicacion de los arreglos es\n\n ";
desplegardatos(tercero,4,4);
getch ();
}
template <class T>
void lecturadatos(T a[10][10], int n, int m)
{
int r,c;
for(r=0;r<n;r++)
{
for(c=0;c<m;c++)
{
cout<<"numero["<<(r+1)<<" , "<<(c+1)<<" ]: ";
cin>>a[r][c];
}
}
}
template <class T>
void desplegardatos(T a[10][10], int n, int m)
 {
 int r,c;
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 cout<<a[r][c]<<"\t";
 }
 cout<<endl;
 }
 }
 template <class T>
 void sumaarreglos(T a[10][10], T b[10][10], T c[10][10], int n, int m)
 {
 int r,c1;
 for(r=0;r<n;r++)
 {
 for(c1=0;c1<m;c1++)
 {
 c[r][c1]= a[r][c1] + b[r][c1];
 }
 }
 }
 template <class T>
 void multarreglos(T a[10][10], T b[10][10], T c[10][10], int n, int m)
 {
 int r,c1;
 for(r=0;r<n;r++)
 {
 for(c1=0;c1<m;c1++)
 {
 c[r][c1]= a[r][c1]* b[r][c1];
 }
 }
 }




--------------------------------------------------------------------------------------------------------------------------


Problema 2

#include <iostream.h>
 #include <stdlib.h>
 #include <conio.h>
 #include <time.h>
 template <class T>
 void generarval(T a[10][10], int n, int m);
 template <class T>
 void desplegardatos(T a[10][10], int n, int m);
 template <class T>
 void datomayor (T a[10][10],int n,int m, T &mayor, int & posr, int & posc);
 int main ()
 {
 int valores[10][10], posRmayor=0,posCmayor=0, mayor=0;
 generarval(valores,5,5);
 cout<<"Matriz Original de 5x5\n";
 desplegardatos(valores,5,5);
 datomayor(valores,5,5,mayor,posRmayor,posCmayor);
 cout<<"\nEl dato mayor es"<<mayor<<endl;
 cout<<"Renglon: "<<(posRmayor+1)<<"columna: "<<(posCmayor+1)<<endl;
 getch ();
 }
 template <class T>
 void generarval(T a[10][10], int n, int m)
 {
 int r,c;
 srand(time(NULL));
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 a[r][c]=rand()%1000 + 1;
 }
 }
 }
 template <class T>
 void desplegardatos(T a[10][10], int n, int m)
 {
 int r,c;
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 cout<<a[r][c]<<"\t";
 }
 cout<<endl;
 }
 }
 template <class T>
 void datomayor (T a [10][10],int n,int m, T &mayor, int & posr, int & posc)
 {
 int r,c;
 mayor=a[0][0];
 posr=0;
 posc=0;
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 if(a[r][c]>mayor)
 {
 mayor=a[r][c];
 posr=r;
 posc=c;
 }
 }
 }
 }



--------------------------------------------------------------------------------------------------------------------------


Problema 3

#include <iostream.h>
 #include <stdlib.h>
 #include <conio.h>
 #include <time.h>
 template <class T>
 void generarval(T a[10][10], int n, int m);
 template <class T>
 void desplegardatos(T a[10][10], int n, int m);
 template <class T>
 void intercambiomatriz(T a [10][10],T b[10][10],int n,int m);
 int main ()
 {
 int a[10][10],b[10][10];
 cout<<"Generando aleatoriamente los valores de la matriz A\n\n";
 generarval(a,4,4);
 intercambiomatriz(a,b,4,4);
 cout<<"\n\nMatriz A\n"<<endl;
 desplegardatos(a,4,4);
 cout<<"\n\nMatriz B\n";
 desplegardatos(b,4,4);
 getch ();
 }
 template <class T>
 void generarval(T a[10][10], int n, int m)
 {
 int r,c;
 srand(time(NULL));
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 a[r][c]=rand()%100;
 }
 }
 }
 template <class T>
 void desplegardatos(T a[10][10], int n, int m)
 {
 int r,c;
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 cout<<a[r][c]<<"\t";
 }
 cout<<endl;
 }
 }
 template <class T>
 void intercambiomatriz(T a [10][10],T b[10][10],int n,int m)
 {
 int r,c;
 for(r=0;r<n;r++)
 {
 for(c=0;c<m;c++)
 {
 b[c][r]=a[r][c];
 }
 }
 }



--------------------------------------------------------------------------------------------------------------------------


Problema 4

# include <iostream.h>
# include <stdlib.h>
# include <time.h>
# include <conio.h>
template <class T>
void leerdatos (T a [10][10],int n,int m);
template <class T>
void generarval(T a [10][10],int n,int m);
template <class T>
void desplegardatos (T a [10][10],int n,int m);
template <class T>
T diagonalp(T a[10][10],int n,int m);
template <class T>
T diagonalinversa (T a [10][10],int n,int m);
template <class T>
void intercambiomatriz (T a [10][10],T b[10][10],int n,int m);
int main()
{
int a[10][10],b[10][10];
cout<<"generando aleatoriamente los datos de la matriz A\n\n";
generarval(a,5,5);
//intercambiomatriz(a,b,5,5);
cout<<"nmatriz A\n";
desplegardatos(a,5,5);
cout<<"\n\nla suma de la diagonal principal:"<<diagonalp(a,5,5)<<endl;
cout<<"\n\nla suma de la diagonal inversa: "<<diagonalinversa(a,5,5)<<endl;
getch();
}
template <class T>
void leerdatos(T a[10][10],int n,int m)
{
int r,c;
for (r=0;r<n;r++)
{
for (c=0;c<m;c++)
{
cout<<"dato["<<(r+1)<<","<<(c+1)<<"]:";
cin>>a[r][c];
}
}
}
template <class T>
void generarval (T a[10][10],int n,int m)
{
int r,c;
 srand(time(NULL));
for (r=0;r<n;r++)
{
for (c=0;c<m;c++)
{
a[r][c]=rand()%10;
}
}
}
template <class T>
void desplegardatos (T a[10][10],int n,int m)
{
int r,c;
for (r=0;r<n;r++)
{
for (c=0;c<m;c++)
{
cout<<a[r][c]<<"\t";
}
cout<<endl;
}
}
template <class T>
T diagonalp(T a[10][10],int n,int m)
{int i;
T suma=0;
for(i=0;i<n;i++)
{
suma=suma+a[i][i];
}
return suma;
}
template <class T>
T diagonalinversa(T a[10][10],int n,int m)
{
int i,j=m-1;
T suma=0;
for (i=0;i<n;i++)
{
suma=suma+a[i][j];
j--;
}
return suma;
}
template <class T>
void intercambiomatriz(T a[10][10],T b[10][10],int n,int m)
{
int r,c;
for (r=0;r<n;r++)
{
for (c=0;c<m;c++)
{
b[c][r]=a[r][c];
}
}
}



--------------------------------------------------------------------------------------------------------------------------


Problema 5

#include <iostream.h>
 #include <conio.h>
 void leerdatos(float a[3][4]);
 void mostrardatos(float a[3][4]);
 void imprimirrangov(float a[3][4], int&cm60,int &c60m70, int &c70m80, int &c80m90, int &c90);
 int main()
 {
 float voltajes[3][4];
 int c1=0,c2=0,c3=0,c4=0,c5=0;
 leerdatos(voltajes);
 cout<<" Matriz devoltajes\n\n";
 mostrardatos(voltajes);
 imprimirrangov(voltajes,c1,c2,c3,c4,c5);
 cout<<" Cantidaddevoltajes\n\n";
 cout<<" Menores a 60: "<<c1<<endl;
 cout<<" Mayores o iguales a 60 pero menor a 70: "<<c2<<endl;
 cout<<" Mayores o iguales a 70 pero menor a 80: "<<c3<<endl;
 cout<<" Mayores o iguales a 80 pero menor a 90: "<<c4<<endl;
 cout<<" Mayores o iguales a 90: "<<c5<<endl;
 getch();
 }
 void leerdatos(float a[3][4])
 {
 int r,c;
 cout<<" Introduicce los sigientes datos\n\n";
 for(r=0;r<3;r++)
  {
  for(c=0;c<4;c++)
   {
   cout<<" Voltaje [ "<<(r+1)<<" , "<<(c+1)<<" ]: ";
   cin>>a[r][c];
}}}
void mostrardatos(float a[3][4])
{
int r,c;
for(r=0;r<3;r++)
 {
 for(c=0;c<4;c++)
  {
  cout<<a[r][c]<<"\t";
  }
  cout<<endl;
}}
void imprimirrangov(float a[3][4], int&cm60,int &c60m70, int &c70m80, int &c80m90, int&c90)
{
int r,c;
cm60=c60m70=c70m80=c80m90=c90=0;
for(r=0;r<3;r++)
  {
  for(c=0;c<4;c++)
   {
   if(a[r][c]<60)
   {cm60++;
   }
   else
   {
   if(a[r][c]<70)
   {c60m70++;
   }
   else
   {
   if(a[r][c]<80)
   {c70m80++;
   }
   else
   {
   if(a[r][c]<90)
   {c80m90++;
   }
   else
   {
   c90++;
   }}}}}}}



--------------------------------------------------------------------------------------------------------------------------


Problema 6

#include <iostream.h>
#include <conio.h>
void leerdatos(int a[7][6],char nombresp[6][20]);
void mostrardatos(int a[7][6],char nombresp[6][20]);
void totalesp(int a [7][6]);
int main()
{int prod[7][6];
char nplantas[6][20];
leerdatos(prod,nplantas);
totalesp(prod);
cout<<"\n\n Reporte semanal deproductividad\n\n";
cout<<" Planta   Dia 1   Dia 2   dia 3   Dia 4   Dia 5   Totales\n\n";
mostrardatos(prod,nplantas);
getch();
}
void leerdatos(int a[7][6],char nombresp[6][20])
{
int r,c;
for(r=0;r<6;r++)
 {
 cin.ignore();
 cout<<"Nombre de la planta "<<(r+1)<<": ";
 cin.getline(nombresp[r],20,'\n');
 for(c=0;c<5;c++)
  {
  cout<<" Produccion dia "<<(c+1)<<": ";
  cin>> a[r][c];
}}}
void mostrardatos(int a[7][6],char nombresp[6][20])
{
int r,c;
for(r=0;r<7;r++)
 {
 cout<<nombresp[r]<<"\t";
 for(c=0;c<6;c++)
  {
  cout<<a[r][c]<<"\t";
  }
  cout<<endl;
}}
void totalesp(int a [7][6])
{
int r,c, suma=0;
for(r=0;r<6;r++)
 {
 suma=0;
 for(c=0;c<5;c++)
  {
  suma=suma+a[r][c];
  }
  a[r][5]=suma;
  }
  for(c=0;c<5;c++)
 {
 suma=0;
 for(r=0;r<6;r++)
  {
  suma=suma+a[r][c];
  }
  a[6][c]=suma;
  }
  for(r=0;r<6;r++)
  {
  suma=suma+a[r][5];
  }
  a[6][5]=suma;
  }