En la misma clase se planteo un programa que creara un archivo de texto en el escritorio de nombre Yoyo y le vaciaba cierta cantidad de datos. Inicialmente determinamos cual es la ruta del escritorio de nuestra maquina, para esto, vemos las propiedades de un archivo en el escritorio 8scritorio y copiamos la ruta del escritorio:
viernes, 23 de mayo de 2025
04.- Programación I - Manejo de Archivos de texto (ESCRITURA) - clase 23 de May 2025
04.- Programación I - Manejo de Archivos de texto (LECTURA) - clase 23 de May 2025
Durante la clase se planteo un programa que lee los datos contenidos en un archivo de texto ubicado en el escritorio de nombre Yoyo.txt. Inicialmente determinamos cual es la ruta del escritorio de nuestra maquina, para esto, vemos las propiedades de el archivo en el escritorio y copiamos la ruta del escritorio:
03.- Programación I - Programa desarrollado en el laboratorio para estudiar triángulos basado en ESTRUCTURAS
Programa
/* Programa que calcula todas las partes de un triangulo
y el tipo del triangulo a partir de dos lados y el angulo
opuesto al lado faltante.
En el programa se aplico el concepto de la estructura.
Elaborado por Carlos Ferrer
Revisión Mayo de 2025
*/
#include <iostream>
#include <math.h>
#include <locale.h>
using namespace std;
//Creamos la estructura
struct Elementos_de_un_triangulo
{
float Q1,Q2,Q3;
float L1,L2,L3;
string tipo;
};
main()
{
setlocale(LC_ALL, "spanish");
// Creamos la variable t1 con todos los datos de la estructura
Elementos_de_un_triangulo t1;
// Ingresamos los datos
cout <<"Ingrese el tamaño del lado Nro. 1 = ";
cin >>t1.L1;
cout <<"Ingrese el tamaño del lado Nro. 2 = ";
cin >>t1.L2;
cout <<"Ingrese el valor del ángulo contrario al Lado Nro. 3 en grados = ";
cin >>t1.Q3;
// Calculamos el lado faltante usan ley del coseno
t1.L3= sqrt(pow(t1.L1,2)+pow(t1.L2,2)-2*t1.L1*t1.L2*cos(t1.Q3*M_PI/180));
// Calculamos los ángulos faltantes usando ley del seno
t1.Q2=asin(sin(t1.Q3*M_PI/180)*t1.L2/t1.L3);
t1.Q1=asin(sin(t1.Q3*M_PI/180)*t1.L1/t1.L3);
// Determinamos el tipo de triangulo
if (t1.L1!=t1.L2 and t1.L1!=t1.L3 )
{
t1.tipo="Escaleno";
}
else if (t1.L1==t1.L2 and t1.L1==t1.L3 )
{
t1.tipo="Equilatero";
}
else
{
t1.tipo="Isosceles";
}
if (t1.Q1*180/M_PI==90 or t1.Q2*180/M_PI==90 or t1.Q3==90)
{
t1.tipo=t1.tipo +" y Rectángulo";
}
system("cls");
// presentamos los resultados
cout <<"********** Resultados *********"<<endl;
cout <<endl<<"Lado Nro. 1 = "<<t1.L1;
cout <<endl<<"Lado Nro. 2 = "<<t1.L2;
cout <<endl<<"Lado Nro. 3 = "<<t1.L3;
cout <<endl<<"Ángulo Nro. 1 = "<<t1.Q1*180/M_PI;
cout <<endl<<"Ángulo Nro. 2 = "<<t1.Q2*180/M_PI;
cout <<endl<<"Ángulo Nro. 3 = "<<t1.Q3;
cout <<endl<<endl<<"El triangulo es = "<<t1.tipo<<endl;
system("pause");
}
viernes, 16 de mayo de 2025
03.- Programación I - Apuntadores y Memoria
La siguiente publicación es sobre el uso de apuntadores, la misma contiene tres (3) programas. Copie y ejecute el primer programa, posteriormente compare los programas 2 y 3. El nro. 2 se elaboró sin el uso de apuntadores. El nro. 3 es el mismo programa con el uso de apuntadores
/* Programa Nro 1 muestra el uso del ampersen & y el * con el
manejo de Punteros
Elaborado por Carlos Ferrer*/
#include<iostream>
using namespace std;
main()
{
int valor=14;
int *apuntador;
cout <<" *************** Manejo de memoria ******************* Pag 1 de 5"<<endl<<endl;
cout <<" El ampersand (&) es un operador de C++ y es comunmente"<<endl;
cout <<" utilizado. Este operador nos permite obtener la direccion"<<endl;
cout <<" de memoria de una variable cualquiera y es justo esto"<<endl;
cout <<" (la direccion en memoria) es lo que utilizan los programas"<<endl;
cout <<" para almacenar los datos o sea los valores asignados a las"<<endl;
cout <<" variables"<<endl<<endl;
cout <<" Veamos un ejemplo:"<<endl;
cout <<" Declaremos una variable entera y asignemosle el numero 14=>"<<endl<<endl;
cout <<" int valor=14"<<endl<<endl;
cout <<" Ahora procedamos a imprimir en pantalla la posicion de"<<endl;
cout <<" memoria, para esto usamos:"<<endl<<endl;
cout <<" cout<<&valor;"<<endl<<endl;
cout <<" El resultado es el siguiente:"<<endl<<endl;
cout<<" "<<&valor<<endl<<endl;
cout <<" En consecuencia en la posicion de memoria "<<&valor<<endl;
cout <<" es donde esta guardado el numero 14 "<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" *************** Apuntadores ******************* Pag 2 de 5"<<endl<<endl;
cout <<" El asterisco (*) es el operador por excelencia"<<endl;
cout <<" de los punteros. Su utilidad radica en que si"<<endl;
cout <<" el valor de dicho apuntador corresponde a una"<<endl;
cout <<" direccion de memoria, el asterisco nos permite"<<endl;
cout <<" acceder al valor almacenado alli."<<endl<<endl;
cout <<" Viendolo desde otro enfoque, un apuntador permite"<<endl;
cout <<" extraer el valor almacenado en una direccion de memoria."<<endl<<endl;
cout <<" IMPORTANTE: Los apuntadores deben ser del mismo tipo"<<endl;
cout <<" que el dato que se desea apuntar."<<endl<<endl;
cout <<" Veamos un ejemplo:"<<endl;
cout <<" Declaremos un apuntador del tipo entero=>"<<endl<<endl;
cout <<" int *apuntador"<<endl<<endl;
cout <<" Ahora hagamos que el apuntador contenga una"<<endl;
cout <<" posicion de memoria, para esto usaremos el & =>"<<endl<<endl;
cout <<" apuntador=&valor"<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" Si imprimimos la variable apuntador Pag 3 de 5"<<endl<<endl;
cout <<" cout <<apuntador;"<<endl<<endl;
cout <<" que dato esperas que aparezca en pantalla:"<<endl<<endl;
cout <<" a) La posicion de memoria que donde esta el numero 14 "<<endl;
cout <<" b) El numero 14 "<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" *************** RESPUESTA ******************* Pag 4 de 5"<<endl<<endl;
cout <<" Si imprimimos la variable apuntador"<<endl<<endl;
cout <<" cout <<apuntador;"<<endl<<endl;
cout <<" que dato esperas que aparezca en pantalla:"<<endl<<endl;
cout <<" Opcion A=>"<<endl<<endl;
apuntador=&valor;
cout <<" La posicion de memoria que donde esta el numero 14 "<<endl<<endl;
cout <<" "<<apuntador<<endl<<endl;
cout <<" . . . ";
system ("pause");
system ("cls");
cout <<" Si queremos imprimir el valor de la posicion de memoria Pag 5 de 5"<<endl;
cout <<" corresponde usar el operador *"<<endl<<endl;
cout <<" para imprimir el dato de la posicion de memoria debemos"<<endl;
cout <<" cambiar => cout <<apuntador;"<<endl;
cout <<" por => cout <<*apuntador;"<<endl<<endl;
cout <<" El resultado sera = "<<*apuntador<<endl<<endl;
cout <<" EXITO!!!!"<<endl<<endl;
system ("pause");
}
--------------------------------------------------------------------
Programa Nro2
/*Este programa contabiliza la cantidad de letras A dentro de
una cadena de caracteres sin el uso de punteros*/
#include<iostream>
using namespace std;
string texto;
main()
{
int i;
int contador=0;
cout <<"ingrese la cadena de caracteres"<<endl;
getline(cin, texto);
for (i=0;i<=29;i=i+1)
{
if(texto[i]=='A' or texto[i]=='a')
{
contador=contador+1;
}
}
cout <<"Tu cadena de caracteres tiene la cantidad de "<<contador<< " letras A"<<endl;
system("pause");
}
-------------------------------------------------------------------
Programa Nro3
/*Este programa contabiliza la cantidad de letras A dentro de
una cadena de caracteres usando punteros*/
#include<iostream>
using namespace std;
string texto;
main()
{
int contador;
char *puntero;
cout <<"ingrese la cadena de caracteres (1 palabra)"<<endl;
getline(cin, texto);
puntero=&texto[0];
while(*puntero)
{
if(*puntero=='A' or *puntero=='a')
{
contador=contador+1;
}
puntero=puntero+1;
}
cout <<"Tu cadena de caracteres tiene la cantidad de "<<contador<< " letras A"<<endl;
system("pause");
}
-------------------------------------------------------------------
Programa Nro4
Otro ejemplo veamos un programa que le envía dos arreglos a una función y este le retorna el valor máximo y mínimo contenido en cada arreglo (usando punteros).
#include<iostream>
using namespace std;
void funcion_unica (double aux1[],double aux2[],int aux1_largo,int aux2_largo,double *a1_min,double *a1_max,double *a2_min,double *a2_max)
{
double aux1_max,aux1_min,aux2_max,aux2_min;
int i;
aux1_max=aux1[0];
aux2_max=aux2[0];
aux1_min=aux1[0];
aux2_min=aux2[0];
for (i=1;i<aux1_largo;i=i+1)
{
if(aux1[i]>aux1_max)
{
aux1_max=aux1[i];
}
if(aux1[i]<aux1_min)
{
aux1_min=aux1[i];
}
*a1_min=aux1_min;
*a1_max=aux1_max;
}
for (i=1;i<aux2_largo;i=i+1)
{
if(aux2[i]>aux2_max)
{
aux2_max=aux2[i];
}
if(aux2[i]<aux2_min)
{
aux2_min=aux2[i];
}
}
*a2_min=aux2_min;
*a2_max=aux2_max;
}
main()
{
double a1[]={12,13,14,15,1,2,1,6,7,8,9,0,12};
double a2[]={1,-23,3.2,4,5,6,7,8,9,12,12,1,0,34,23};
double min_a1,max_a1,min_a2,max_a2;
int largo_a1, largo_a2;
largo_a1=sizeof(a1)/sizeof(a1[0]);
largo_a2=sizeof(a2)/sizeof(a2[0]);
funcion_unica(a1,a2,largo_a1,largo_a2,&min_a1,&max_a1,&min_a2,&max_a2);
cout<<min_a1<<endl;
cout<<max_a1<<endl;
cout<<min_a2<<endl;
cout<<max_a2<<endl;
}
jueves, 15 de mayo de 2025
03.- Programación I - Funciones
Una función en C++ es un
fragmento de código que se puede llamar desde cualquier punto de un programa
principal (main). En C++ podemos diferenciar entre dos tipos de funciones:
- Aquellas que no tienen retorno void (Vacias).
- Aquellas que retornan un tipo de dato (como int, double o cualquier otro),
IMPORTANTE: NO SOBREUTILICE LAS FUNCIONES, EL USO DE LAS MISMAS SE JUSTIFICA SI DENTRO DE LOS PROGRAMAS HAY PROCEDIMIENTOS QUE SE REPITEN MULTIPLES VECES.
ORGANIZAR UN PROGRAMA CON EL USO DE LAS FUNCIONES PUEDE SER UNA COSTUMBRE INAPROPIADA.
Ejemplo de función tipo void:
Como vemos, las funciones
las hemos situado antes de la función main. Alternativamente, podemos situar el
cuerpo de las funciones después de la función main. Veamos nuevamente los dos programas haciendo ese ajuste de
posición (Colocando la función al final).
Ejemplo de función tipo
void - colocando la función al final (Noten la doble declaración):
Veamos el mismo programa
usando función de retorno - colocando la función al final (Noten nuevamente la doble declaración):
IMPORTANTE: Para retornar mas de un datos desde una función se puede utilizar datos de memoria con la técnica de los apuntadores.