Sei sulla pagina 1di 11

Universidad de El Salvador

Facultad de Ingeniera y Arquitectura


Escuela de Ingeniera Elctrica
Programacin l PEL-115

Reporte del Laboratorio N 1:


E/S en C++

Instructor: Israel Bautista

Integrantes:
Amaya Figuera Rodrigo Alexander
Caballero Bautista Eduardo Enrique
Recinos Bolaos Manuel Josu
Sorto Castillo, Jairo Josu

Carnet:
AF14002
CB14008
RB14007
SC14009

Ciudad Universitaria, Viernes 11 de septiembre de 2015

Desarrollo de la prctica:
Problema 1:
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#define FILAS 5
#define COLUMNAS 5
int main()
{
float matriz[FILAS][COLUMNAS];
//matriz de FILASxCOLUMNAS
for (int i=0;i<FILAS;i++)
//llenar la matriz con numeros
aleatorios
for (int j=0;j<COLUMNAS;j++)
matriz[i][j]=(rand( )-RAND_MAX/2.0)*1.23456789;
cout.setf(ios::left|ios::scientific|ios::uppercase|ios::showpos);
//alineacion a la derecha, notacion cientfica,
//caracteres de formato en mayusculas, mostrar signo positivo
for (int i=0;i<FILAS;i++)
{ //imprimir la matriz
for (int j=0;j<COLUMNAS;j++)
{
cout <<setw(12);
//ancho de campo 9
cout <<setprecision(1); //precision 2
cout <<setfill(' ');
//llenar con espacios
cout <<matriz[i][j];
//imprimir el elemento
}
cout<<endl;
}
return 0;
}

Pgina 2 de 11

PEL115

2 Ciclo 2015

Problema 2
using namespace std;
#include<iostream> //cout,cin
#include<iomanip> //setfill,setw
#include<math.h> //sin()
#include <values.h> //MAXFLOAT
#define NPUNTOS 69
#define FUNCION(x) sin(x)
int main(){
float x[NPUNTOS], y[NPUNTOS], ymin=NPUNTOS, ymax=-NPUNTOS,xmin, xmax;
cout<<"Introduzca el limite inferior de x: ";
cin>>xmin;
cout<<"Introduzca el limite superior de x: ";
cin>>xmax;
/*llenar vectores y determinar maximo y minimo de la funcion*/
for (int i=0;i<NPUNTOS;i++){
x[i] = xmin+(xmax-xmin)/(NPUNTOS-1)*i;
y[i] = FUNCION(x[i]);
ymax = (y[i]>ymax) ? y[i]:ymax;
ymin = (y[i]<ymin) ? y[i]:ymin;
}
cout.setf(ios::right|ios::scientific|ios::uppercase|ios::showpos);
//escribir cabeceras
cout <<setfill(' ')
<<setw(6)<<"x"
<<setw(11)<<"f(x)"
<<setw(35)<<"grafico"
<<endl;
for (int i=0;i<NPUNTOS;i++) {
cout<<'|';
cout.width(9); //ancho de campo 9
cout.precision(2); //precision 2
cout.fill(' ');// llenar con
blancos
cout<<x[i]<<'|';
cout.width(9); //ancho de campo 9
cout.precision(2); //precision 2
cout.fill(' '); // llenar con
blancos
cout<<y[i]<<'|';
cout.width( ( int ) 52
/(ymax-ymin)*(y[i]-ymin) );
cout.fill(' '); // llenar con
blancos
cout<<"*"<<endl;
}
return 0;
}

Pgina 3 de 11

PEL115

2 Ciclo 2015

Problema 3
/* Descripcion: Este programa es capaz de leer linea por linea todo el contenido de un
archivo secuencial, cuando se presenta el fin de archivo, simplemente suspende la lectura.
Observa que cada linea que se lee se impresa. */
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char
**argv){
char frase[81];
fstream fi;
if(argc != 2) {
cout << "Usar: verf
<Archivo>"<< endl;
return 1;
}
fi.open(argv[1],
ios::in);
if(!fi) {
cout << "El Archivo " << argv[1]
<< " no existe o no puede ser abierto."<< endl;
return 1;
}
while(fi.getline( frase , 80 ) != NULL){
cout << frase << endl;
}
return 0;
}

Pgina 4 de 11

PEL115

2 Ciclo 2015

Problema 4:
#include <fstream>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char **argv){
ifstream fe;
ofstream fs;
char buffer[2048]; // Buffer de 2 Kbytes
int bytesLeidos;
if(argc != 3){
system("clear");
cout << "Usar: copia <Archivo_origen> <Archivo_destino>" << endl;
return 1;
}
//abrir el archivo de entrada para lectura
fe . open( argv[1], ios::in );
if( !fe ) {
system("clear");
cout<< "El Archivo " << argv[1];
cout<<"no existe o no puede ser
abierto."<<endl;
return 1;
}
// Crear o sobreescribir el
Archivo de salida
fs.open(argv[2], ios::out);
if( !fs ){
cout << "El Archivo " << argv[2]
<< " no puede ser creado." <<
endl;
fe . close( );
return 1;
}
do {
fe.read( buffer, 2048 ) ;//leer del archivo de entrada al buffer
fs . write(buffer,fe.gcount());
} while( !fe.eof( ) );
fe . close( );
fs . close( );
return 0;
}

Pgina 5 de 11

PEL115

2 Ciclo 2015

Asignacin:
1- Realizar un programa que solicite un numero entero n entre 2 y 23 para que muestre un tringulo
como el abajo que es para n=5 .
1 1
1 2 1 2
1 2 3 1 2 3
1 2 3 5 1 2 3 5
1 2 3 5 7 1 2 3 5 7
#include <iostream>
#include <iomanip>
using namespace std;
int main (){
int primos[25], cont, aumento = 0, n = 79, espacios = 42;
for (int i = 1; i <= n; i++ ){
cont=0;
for (int k = 1; k <= i; k++ )
if (i % k == 0 ) cont += 1;
if (( cont == 2 )|( i == 1 )){
aumento++;
primos[aumento] = i;
}
}
cout << "\nDigite un Numero entero del 2 al 23: ";
do {
cin >> n;
if (n > 23||n < 2)
cout << "\a\nIntroduzca solo numeros de 2 a 23\n";
} while (n > 23 || n < 2);
for (int i = 1; i <= n; i++ ){
for (int k = 1; k <= i; k++ ) {
if (i<6) cout.width(espacios--);
if (i>=6) cout.width((espacios-=2)+1);
for ( k = 1; k <= i; k++ ){
cout <<primos[k];
}
for ( k = 1; k <= i; k++ ){
cout <<primos[k];
cout <<setfill(' ');
}
cout << endl;
}
}
return 0;
}

Pgina 6 de 11

PEL115

2 Ciclo 2015

2- Hacer un programa en C++ que acepte una oracin desde el teclado para luego imprimirla en un
archivo en orden inverso. Se recomienda el uso de new y delete.
# include <iostream>
# include <string.h>
# include <fstream>
using namespace std;
#define cantidad 100
int main () {
char oracion[cantidad];
int n=0, p;
cout << "\nIntroduzca una Oracion: "
<< "\nPresione Ctrl+c al haber
finalizado\n"
<< endl;
ofstream file ("oracion_inversa.dat");
do{
if (n >= cantidad) break;
} while ((oracion[n++]=getchar())!=EOF);
char *oracion2 = new char [strlen(oracion)+1];
strcpy (oracion2, oracion);
for (p=n-1; p>=0; p--)
file << oracion[p];
file.close();
cout << endl;
delete [] oracion2;
return 0;
}

3- Hacer un programa en C++ que genere una matriz de nxn de nmeros aleatorios, y que guarde la
matriz inversa correspondiente en algn archivo. Tanto 'n' como el nombre del archivo se pasar desde
la lnea de comandos y, si el archivo existe se debe lanzar una advertencia con el fin de no hacer una
sobre escritura.
#include<fstream>
#include<iostream>
#include<cstdlib>
using namespace std;
int main( int argc, char **argv) {

Pgina 7 de 11

PEL115

2 Ciclo 2015

int h,b,i,j,l,k,num;
int **mat;
j=atoi(argv[1]);
srand(time(0));
mat= new int *[j];
for(l=0; l<j; l++)
mat[l]= new int [j];
for(i=0; i<j; i++){
for(k=0; k<j; k++){
mat[i][k]=rand();
}
}
ofstream escribir(argv[2], ios::app);
for(i=0; i<j; i++){
for(k=0; k<j; k++){
escribir<<mat[i][k]<<'\t';
}
escribir<<endl;
}
escribir<< '\n';
escribir<< '\n';
for(i=0; i<j; i++){
for(k=0; k<j; k++){
escribir<<mat[k][i]<<'\t';
}
escribir<<endl;
}
escribir.close();
return 0;
}

Pgina 8 de 11

PEL115

2 Ciclo 2015

4- Hacer un programa en C++ que escriba en un archivo mil nmeros enteros aleatorios.
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main(){

ofstream escribir("Mil
numeros.txt");
srand(time(0));
for(int i=1;i<=1000;i++){
escribir<<i<<'.'<<'\t'<<rand()<<
endl;
//cout<<i<<rand()<<endl;
}
return 0;
}

5- El inventario de una tienda esta guardado en un archivo, en el cual cada producto utiliza los
siguientes campos: cdigo de barras, nombre del producto, precio unitario y existencia. Hacer un
programa en C++ que busque un producto en particular, y si esta en el inventario indicar toda la
informacin relacionada con el. Desde la lnea de comando se pasar el nombre del producto y del
archivo, si el nmero de parmetros no es adecuado se debe presentar un mensaje de error y si el
producto no esta en el inventario se debe mostrar en pantalla ''Producto no encontrado'', si el archivo no
existe se debe generar un beep y el mensaje ''Archivo no existe'' y si el archivo no se puede abrir se se
debe mostrar en pantalla ''Permiso denegado''.
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int main(int argc, char** argv) {
int n=0, i=0, j=0;
char tex[101], datos[101],
Pgina 9 de 11

PEL115

2 Ciclo 2015

obbusqueda[101];
if(argc!=3){
cerr << "Error en parametros,
usar: <Nombre> <Archivo.txt>\a"<< endl;
return 1;
}
strcpy(obbusqueda, argv[1]);
ifstream lec(argv[2]);
do{
n++;
}while(!(obbusqueda[n]=='\0'));
if(lec.fail()){
cerr <<"Permiso denegado "<<argv[2]<<" el archivo no existe\a"<<endl;
return 1;
}else{
while(!lec.eof()){
lec.getline(datos, 101);
strncpy(tex, datos, n);
while(i<n){
if(tex[i]==obbusqueda[i]){
j++;
}
i++;
}
if(i==j){
cout<<"Buscando "<<obbusqueda<<endl;
cout<<"En el archivo
"<<argv[2]<<endl;
cout<<"Datos
solicitados:"<<endl;
cout<<datos<<endl;
return 0;
}
i=0;

j=0;
}if(lec.eof()){
cout<<"El objeto"
<<obbusqueda<<" no esta
en el inventario\a"
<<endl;
Pgina 10 de 11

PEL115

2 Ciclo 2015

return 0;
}
}
return 0; }

Conclusiones:
C++ nos ofrece en trminos generales una versin ms optimizada que ANSI C dado que existe
herramientas como las funciones sobrecargadas que simplifican y minimizan el cdigo.

La lgica de programacin es en esencia la misma, solo existen cambios menores que debemos
tomar en cuenta, como el agregar USING NAMESPACE en los headers de los cdigos, al imprimir o
capturar en pantalla no debemos especificar el tipo de variable, entre otros.

La capacidad de manipular el formato de salida ayuda a que los programas se vean de una forma
ms ordenada sin una interfaz grfica dado que trabajamos desde consola.

Pgina 11 de 11

PEL115

2 Ciclo 2015