Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Mario Olivera

#21
Cita de: Stakewinner00 en 15 Mayo 2015, 19:29 PM
"Out of range" parece que tienes una string de X tamaño y estas intentando acceder a una posición que como indica el error es más grande que ese tamaño X. Pero claro, sin el código poco se puede hacer.

Gracias Stakewinner00, buscaré con la herramientita cout donde se encuentra el error, cualquier cosa, aviso por aca. Saludos!
#22
Cita de: Stakewinner00 en 15 Mayo 2015, 19:15 PM
Pon el code. Yo entendí lo siguiente
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>

int main()
{
 std::string str;
 std::cin >> str; //pido valor tipo string
 std::cout << str;
}

y no tiene ningún error.

disculpa me habia expresado mal, es al reves ahi lo corregí, dejo una foto del error:

#23
 Hola gente, estoy teniendo un problema con una variable string, mi problema solo es en C++ en otr lenguaje no. Bueno mi problema es el siguiente:

pido un valor de tipo string,

si es valor es por ejemplo "+" el programa no se cierra y no tira error.
pero si se ingresa solo "+sadasd" se cierra y tira error.

Alguna solucion?  :P
#24
Mision del programa: convertir variable string a integer

Programita hecho por mi, que lee un numero (la variable de tipo string), saca digito por digito y va comprobando, se encuentra con problematicas como tener un signo + o - delante, con problematicas como que empieze con 0, que tenga letras, que tenga puntos etc.

Gran utilidad para cuando estamos esperando un integer, y nos ingresan un string, donde el programa siempre se termina cerrando.

Saludos! Mario Olivera.

PD: se puede hacer un archivo .h para C++ e implementarlo para cada variable :D



[youtube=640,360]https://www.youtube.com/watch?v=tnJqZjGz23A[/youtube]

Código en pascal (despues dejaré el de C++)
Código (pascal) [Seleccionar]
program hki;

Uses
crt;

var
(*VARIABLES PARA EL PASAJE DE STRING INTEGER!*)
ladoDelCuadrado:integer;
cantidadDeCaracteres:integer;
auxCantidadCaracteres:integer;
multiplicador,resultado:integer;
auxNumero:string;
caracter:char;
i:integer;
polaridad:boolean;
interruptor:boolean;
cambioPolaridad:boolean;
respuesta:boolean;

(*VARIABLES PARA DIBUJAR EL CUADRADO!*)
anchoUno:integer;
cantidadDeLineas:integer;
auxAncho:integer;

BEGIN
ClrScr;


i:=1;
interruptor:= false; (* si los varoles son correctos esta en true, cuando entra a un else de algun case se apaga y asi queda*)
polaridad:= true; (* Numero positivo*)
    cambioPolaridad:=false;
respuesta:= true;

write('Ingrese el lado del cuadrado: ');
readLn(auxNumero); (*Lee el numero string*)

cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;

while (interruptor <> true) do
begin
interruptor:= true;
if (cantidadDeCaracteres = 1) then
begin
caracter:= auxNumero[1];
case caracter of
'0':
begin
ladoDelCuadrado:= 0;
end;
'1':
begin
ladoDelCuadrado:= 1;
end;
'2':
begin
ladoDelCuadrado:= 2;
end;
'3':
begin
ladoDelCuadrado:= 3;
end;
'4':
begin
ladoDelCuadrado:= 4;
end;
'5':
begin
ladoDelCuadrado:= 5;
end;
'6':
begin
ladoDelCuadrado:= 6;
end;
'7':
begin
ladoDelCuadrado:= 7;
end;
'8':
begin
ladoDelCuadrado:= 8;
end;
'9':
begin
ladoDelCuadrado:= 9;
end;
else
begin
interruptor:= false;
end
end;
end
else
begin
while (i <  cantidadDeCaracteres) do (*Me Falta sumar el ultimo digito itera 4 veces*)
begin
caracter:= auxNumero[1];
if (i = 1) then
begin
if (caracter = '+') then
begin
auxNumero:= copy(auxNumero,2,cantidadDecaracteres);
end;

if (caracter = '-') then
begin
auxNumero:= copy(auxNumero,2,cantidadDecaracteres);
interruptor:= false;
polaridad:= false; (* SE PONE EN MENOS*)
cambioPolaridad:= true;
end;

end;

caracter:= auxNumero[i];
(*if (interruptor <> false) then
begin*)
case caracter of
'0':
begin
if ((auxNumero[1]) <> '+') or ((auxNumero[1]) <> '-') then
begin
if (i > 1) then
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado);
end;

end
else
begin
if (i > 2) then
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado);
end;
end;
end;
'1':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 1 * resultado);
end;
'2':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 2 * resultado);
end;
'3':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 3 * resultado);
end;
'4':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 4 * resultado);
end;
'5':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 5 * resultado);
end;
'6':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 6 * resultado);
end;
'7':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 7 * resultado);
end;
'8':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 8 * resultado);
end;
'9':
begin
ladoDelCuadrado:= ladoDelCuadrado + ( 9 * resultado);
end
else
begin
respuesta:=false;
end;
end;
(*end;*)

resultado:= resultado * 10;
i:= i + 1;
end;

end;

(* SACANDO EL ULTIMO DIGITO POR FIN! *)
if (cantidadDeCaracteres <> 1) then
begin
if (cambioPolaridad = true) then
begin
cantidadDeCaracteres:= cantidadDeCaracteres + 1;
caracter:= auxNumero[cantidadDeCaracteres];
end
else
begin
caracter:= auxNumero[cantidadDeCaracteres];
end;

case caracter of
'1','2','3','4','5','6','7','8','9','0':
begin

end;
else
begin
respuesta:= false;
end;
end;

if (interruptor = true) and (respuesta = true) and (ladoDelcuadrado > 9) then
begin
if (cambioPolaridad = true) then
begin
cantidadDeCaracteres:= cantidadDeCaracteres + 1;
caracter:= auxNumero[cantidadDeCaracteres];
end
else
begin
caracter:= auxNumero[cantidadDeCaracteres];
end;

case caracter of
'1':
begin
ladoDelCuadrado:= ladoDelCuadrado + 1;
end;
'2':
begin
ladoDelCuadrado:= ladoDelCuadrado + 2;
end;
'3':
begin
ladoDelCuadrado:= ladoDelCuadrado + 3;
end;
'4':
begin
ladoDelCuadrado:= ladoDelCuadrado + 4;
end;
'5':
begin
ladoDelCuadrado:= ladoDelCuadrado + 5;
end;
'6':
begin
ladoDelCuadrado:= ladoDelCuadrado + 6;
end;
'7':
begin
ladoDelCuadrado:= ladoDelCuadrado + 7;
end;
'8':
begin
ladoDelCuadrado:= ladoDelCuadrado + 8;
end;
'9':
begin
ladoDelCuadrado:= ladoDelCuadrado + 9;
end
end;
end
else
begin
writeln('No ingreses valores torpes o(-.-)o: ');
write('Ingrese el lado del cuadrado: ');
readLn(auxNumero);
i:=1;
interruptor:= false;
polaridad:= true; (* Numero positivo*)
cambioPolaridad:=false;
respuesta:= true;
cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;

                            end;
end
else (*SI TIENE 1 CARACTER*)
begin
if(interruptor = false) then
begin
writeln('No ingreses valores torpes o(-.-)o: ');
write('Ingrese el lado del cuadrado: ');
readLn(auxNumero);
i:=1;
interruptor:= false;
polaridad:= true; (* Numero positivo*)
cambioPolaridad:=false;
respuesta:= true;
cantidadDeCaracteres:=length(auxNumero);
multiplicador:= 10;
ladoDelCuadrado:= 0;
resultado:= 10;
end;
end;
end; (*FIN WHILE*)

(*YA TENDRIA EL VALOR INTEGER*)
writeln('Valor: ',ladoDelCuadrado);
(*ESCRITURA DEL CUADRADO!!!! POR FIN -.- *)

auxAncho:=0;
anchoUno:= 0;
cantidadDeLineas:=1;


if (ladoDelCuadrado = 1) then
begin
writeLn('*');
end

else
begin

while (anchoUno <> ladoDelCuadrado) do
begin
write('*');
anchoUno:= anchoUno + 1;
end;

anchoUno:= 0;
writeLn(' ');



while ((ladoDelCuadrado >= 3) and ( cantidadDeLineas <= (ladoDelCuadrado - 2))) do
begin
write('*');

while (auxAncho < (ladoDelCuadrado -2)) do
begin

write(' ');
auxAncho:= auxAncho + 1;
end;
auxAncho:= 0;
writeLn('*');
cantidadDeLineas:= cantidadDeLineas + 1;
end;

while (anchoUno <> ladoDelCuadrado) do
begin
write('*');
anchoUno := anchoUno + 1;
end;
writeLn(' ');
end;

readkey;
END.
#25
 Hola gente, vengo a dejarles un ejercicio, para aquellos que quieran practicar los bucles, o ciclos, un ejercicio que dice lo siguiente:

Ejercicio: Escriba un programa que pida al usuario que introduzca el tamaño del lado de un cuadrado y que muestre un cuadrado hueco de ese tamaño, compuesto de asteriscos y espacios en blanco. Su programa debe funcionar con cuadrados que tengan lados de todas las longitudes entre 1 y 20. por ejemplo, si su programa lee un tamaño de 5, debe imprimir:

*****
*      *
*      *
*      *
*****

Espero les resulte facil, para el que este practicando los ciclos les va a servir!

Comenten sus códigos jeje  :P

Saludos!  ;D

Dejo mi desarrollo para el que lo quiera ver, estaría bueno que antes hagan el ejercicio.

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::endl;
using std::cout;

#include "cabezal.h"

int main()
{
int auxCuadrado;
cout <<"Ingrese el lado del cuadrado: ";
cin  >>auxCuadrado;

while (auxCuadrado < 1)
{
cout <<"\nERROR!: Ingrese el lado del cuadrado: ";
cin  >>auxCuadrado;
}

cabezal aplicacion;
aplicacion.obtenerCuadrado(auxCuadrado);
cin.get();
cin.get();
return 0;
}


cabezal.h
Código (cpp) [Seleccionar]
class cabezal
{
public:
//funciones obtener
void obtenerCuadrado(int);

private:
int cuadrado;
};


cabezal.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::endl;
using std::cout;

#include "cabezal.h"

void cabezal::obtenerCuadrado(int Cuadrado)
{
int anchoUno=0;

if (Cuadrado == 1)
{
cout <<"*" <<endl;
}

else
{
while (anchoUno != Cuadrado)
{
cout <<"*";
++anchoUno;
}

anchoUno= 0;
cout <<endl;

int auxLineas=1;

while ((Cuadrado >= 3) && ( auxLineas <= (Cuadrado - 2)))
{
int auxAncho= 0;
cout <<"*";

while (auxAncho < (Cuadrado -2))
{
cout <<" ";
++auxAncho;
}
cout <<"*" <<endl;
++auxLineas;
}

while (anchoUno != Cuadrado)
{
cout <<"*";
++anchoUno;
}
cout <<endl;
}
}
#26
Cita de: ivancea96 en  2 Mayo 2015, 00:16 AM
Pusiste if(numeroDeEmpleado = 1). Hay que poner 2 símbolos igual para comparar. ==

Ya habia encontrado el error! muchas gracias igual!
#27
 Hola amigos, tengo un problema, el valor de numeroDeEmpleado llega a 2, pero el ciclo sigue repitiendose.. porque?

No dejo el .h y el otro cpp, porque no creo que tendrán algo que ver.. Saludos!

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::cin;
using std::endl;

#include <string>
using std::string;

#include "Empleado.h"

int main()
{
//variables
string nombre,apellido;
int salario;
int numeroDeEmpleado= 1;

while (numeroDeEmpleado <= 2) //itera 2 veces
{
cout <<"Empleado " <<numeroDeEmpleado <<": \n";
cout <<"Nombre: ";
cin  >> nombre;
cout <<"\nApellido Paterno: ";
cin  >> apellido;
cout <<"\nSalario Mensual: ";
cin  >> salario;
cout <<endl;

if (numeroDeEmpleado = 1)
{
Empleado empleado1(nombre,apellido,salario);
cout <<"\nNombre: " <<empleado1.obtenerPrimerNombre() <<endl;
cout <<"Apellido: " <<empleado1.obtenerApellidoPaterno() <<endl;
cout <<"Salario Mensual: " <<empleado1.obtenerSalarioMensual() <<endl;
cout <<"Salario Anual: " <<empleado1.obtenerSalarioAnual() <<endl;
}

else
{
Empleado empleado2(nombre,apellido,salario);
cout <<"\nNombre: " <<empleado2.obtenerPrimerNombre() <<endl;
cout <<"Apellido: " <<empleado2.obtenerApellidoPaterno() <<endl;
cout <<"Salario Mensual: " <<empleado2.obtenerSalarioMensual() <<endl;
cout <<"Salario Anual: " <<empleado2.obtenerSalarioAnual() <<endl;
}

numeroDeEmpleado++;
}
cin.get();
cin.get();
return 0;
}
#28
 Hola gente, les dejo un código fuente que hice en C++, es un programita sencillo, pero para el que esté estudiando el tema de la separación de la interfaz de la implementación usando un .h y dos .cpp, les va a ayudar, cualquier error o algo avisen.

PD: use el system("cls") porque la idea es mostrar un poco como se maneja la sepacion de la interfaz de la implementación, no como es la manera correcta de limpiar la consola xD SALUDOS!

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;

#include "cabezal.h"

int main()
{

programa llamador;
llamador.inicio();
cin.get();
return 0;
}


cabezal.h
Código (cpp) [Seleccionar]
class programa
{
public:
//FUNCIONES MIENBRO
void inicio();
void mostrarDatos();
void mostrarMenu();
void comprobarOption(int);
void nuevoProducto(int);
};

cabezal.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;
using std::cin;

#include "cabezal.h"

//VARIABLES
int cantidadDeProductos;
int optionNuevoProducto;
int totalProductos= 0;
double precioProducto;
double total = 0;

void programa::inicio()
{
mostrarDatos();
mostrarMenu();
}
void programa::mostrarDatos()
{
cout <<endl <<endl;
cout <<"\t. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  ."
<<"\n\t.                   SUPER-M V 1.0 FIX 0                        ."
<<"\n\t.                                                              ."
<<"\n\t.  DP: MARIO.OLIVERA96@GMAIL.COM                               ."
<<"\n\t.  SINCE: 2015                                                 ."
<<"\n\t  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  "
<<endl <<endl <<endl;
}
void programa::mostrarMenu()
{
int option;
cout <<"MENU" <<endl <<endl;
cout <<"(1) Nuevo Producto\n(2) Terminar compra\n\n";
cout <<"Option: ";
cin >> option;
cout <<"\a";
comprobarOption(option);
}
void programa::comprobarOption(int option)
{

switch (option)
{
case 1:
system("cls");
cout <<"Precio: ";
cin  >> precioProducto;
cout <<"\a\nCantidad: ";
cin  >> cantidadDeProductos;
cout <<"\a\n(1)LISTO\t(2) ATRAS\nOption: ";
cin  >> optionNuevoProducto;
cout <<"\a";
nuevoProducto(optionNuevoProducto);




break;

case 2:
system("cls");
if (totalProductos <= 0)
{
cout <<"COMPRA TERMINADA.\n\nCantidad de productos: 0\n\nTotal a pagar: $0.00"<<endl;
cin.get();
cin.get();
system("cls");
inicio();
}
else
{
cout <<"COMPRA TERMINADA.\n\nCantidad de productos: " <<totalProductos <<"\n\nTotal a pagar: $" <<total <<endl;
cin.get();
cin.get();
total=0;
totalProductos=0;
system("cls");
programa();
}
break;
default:
system("cls");
cout <<"\nVALOR INVALIDO!\nPRESIONE ENTER.\n";
cin.get();
cin.get();
system("cls");
inicio();
break;
cout <"ja!\n";
cin.get();
}
}
void programa::nuevoProducto(int optionNuevoProducto)
{

switch (optionNuevoProducto)
{
case 1:
if ((precioProducto >= 0) && (cantidadDeProductos >= 0))
{
totalProductos+= cantidadDeProductos;
total+= cantidadDeProductos * precioProducto;
cout<<totalProductos <<" "<<total;
cin.get();
system("cls");
inicio();
}

else
{
cout <<"\nVALORES INVALIDOS!\nPRESIONE ENTER\n";
cin.get();
cin.get();
comprobarOption(1);
}

break;

case 2:
system("cls");
inicio();
break;
}
}
#29
Cita de: ivancea96 en 25 Abril 2015, 13:21 PM
Código (cpp) [Seleccionar]
case 1: cout <<"DIES Y ";
case 2: cout <<"VEINT y ";


Ambos son incorrectos >.>

Losé Losé xD pero me habia olvidado de editarlo hahaha, lenguaEspaniola <--- 0;
jajaja!
#30
 Hola gente, como dice el titulo vengo a dejarles otro aporte mas, para el que este estudiando la condición SEGUN (switch) esto les va a venir bién, es una anidacion la cual permite que cuando se ingresa un número menor a 1000 se imprima su nombre, dejo el código :D


main.cpp
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;

int numero,centena,decena,unidad,resto;

int main()
{
cout <<"Ingrese el numero (menor a 999):  ";
cin >> (numero);

if ((numero < 1000) && (numero >=0) )
{
centena= numero / 100;
decena= ((numero % 100) / 10);
unidad= ((numero % 100) % 10);

switch (centena)
{
case 1:
if(numero > 100)
{
cout <<"Ciento ";
}
else
{
cout <<"cien";
}
break;
case 2:cout <<"DosCientos ";
break;
case 3:cout <<"TresCientos ";
break;
case 4:cout <<"CuatroCientos ";
break;
case 5:cout <<"Quinientos ";
break;
case 6:cout <<"SeisCientos ";
break;
case 7:cout <<"SeteCientos ";
break;
case 8:cout <<"OchoCientos ";
break;
case 9:cout <<"NueveCientos ";
break;
}

resto= numero % 100;

switch (resto)
{
case 10: cout <<"DIEZ";
break;
case 11: cout <<"ONCE";
break;
case 12: cout <<"DOCE";
break;
case 13: cout <<"TRECE";
break;
case 14: cout <<"CATORCE";
break;
case 15: cout <<"QUINCE";
break;
case 20: cout <<"VEINTE";
break;
case 30: cout <<"TREINTA";
break;
case 40: cout <<"CUARENTA";
break;
case 50: cout <<"CINCUENTA";
break;
case 60: cout <<"SESENTA";
break;
case 70: cout <<"SETENTA";
break;
case 80: cout <<"OCHENTA";
break;
case 90: cout <<"NOVENTA";
break;
default:
{
switch (decena)
{
case 1: cout <<"DIES Y ";
break;
case 2: cout <<"VEINT y ";
break;
case 3: cout <<"TREINTA y ";
break;
case 4: cout <<"CUARENTA y ";
break;
case 5: cout <<"CINCUENTA y ";
break;
case 6: cout <<"SESENTA y ";
break;
case 7: cout <<"SETENTA y ";
break;
case 8: cout <<"OCHENTA y ";
break;
case 9: cout <<"NOVENTA y ";
break;
}
switch (unidad)
{
case 0: cout <<"CERO";
break;
                                                       case 1: cout <<"UNO";
break;
case 2: cout <<"DOS";
break;
case 3: cout <<"TRES";
break;
case 4: cout <<"CUATRO";
break;
case 5: cout <<"CINCO";
break;
case 6: cout <<"SEIS";
break;
case 7: cout <<"SIETE";
break;
case 8: cout <<"OCHO";
break;
case 9: cout <<"NUEVE";
break;
}
}
}
}
else
{
cout <<"valor no valido";
}
cin.get();
cin.get();
return 0;
}