Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con un programa en c++

Estas en el tema de Ayuda con un programa en c++ en el foro de C/C++ en Foros del Web. HOLA... APENAS ESTOY INICIANDOME EN ESTO DE LA PROGRAMACION Y ME HE TOPADO CON UN PROBLEMA EL CUAL NO HE PODIDO RESOLVER. EL PROGRAMA PIDE ...
  #1 (permalink)  
Antiguo 03/11/2010, 16:22
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Ayuda con un programa en c++

HOLA... APENAS ESTOY INICIANDOME EN ESTO DE LA PROGRAMACION Y ME HE TOPADO CON UN PROBLEMA EL CUAL NO HE PODIDO RESOLVER.

EL PROGRAMA PIDE INSERTAR UN ELEMENTO AL INICIO DE LA LISTA LA CUAL LO INSERTA PERO LO QUE DESEO ES QUE NO SE BORRE ESE MISMO VALOR CUANDO INSERTE UNO NUEVO SI NO QUE PERMANEZCA CUANDO SE IMPRIMA.

HASTA AHORA SOLO HE PODIDO INSERTAR UN VALOR YA QUE DESPUES SE BORRA
OJALA Y PUDIERAN AYUDARME YA QUE CREO NECESITO RECORRER LOS VALORES HACIA LA DERECHA PERO EL PROBLEMA ES QUE NO SE DE QUE MANERA.

NOTA: NO DEDO UTILIZAR APUNTADORES, ESA FUE UNA CONDICION.


//INSERTAR UN ELEMENTO AL INICIO DE LA LISTA


#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>

main()

{ int i,n=0,a[50]={0},resp=0,no,j,nv=0,opc=0,;
do{
cout<<endl;
cout<<"Cuantos elementos deseas ingresar ";
cin>>n;
cout<<endl;
for(i=1;i<=n;i++){
cout<<"ingresa "<<i<<": ";
cin>>a[i];
}
cout<<endl;
cout<<"La lista queda como"<<endl<<endl;
for(i=1;i<=n;i++){
cout<<a[i]<<",";
}

cout<<endl<<endl;
cout<<"___Deseas ingresar un valor a la lista___"<<endl;
cout<< " Ingresa *1* para___si o *2* para _no_"<<endl<<endl;
cin>>resp;

if(resp==1){
do{
cout<<"ingresa el siguiente valor"<<endl;
cin>>nv;

a[0]=nv;
for(i=0;i<=n;i++){
cout<<a[i]<<",";

}

cout<<"deseas ingresar otro valor"<<endl<<endl;
cin>>opc;
}while(opc==1);

}

else {

cout<<"";
}

getch();
system("cls");

cout<<endl<<endl;
cout<<"Deseas realizar nuevamente la operacion con otros valores"<<endl;
cout<<endl;
cout<<"Ingresa *1* para --si-- o *2* para --no-- ";
cin>>opc;
}while(opc==1);

getch();

}
  #2 (permalink)  
Antiguo 04/11/2010, 01:08
Avatar de DarKayserLeo  
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ayuda con un programa en c++

Hola amigo, espero que mi respuesta pueda ayudarte y no sea demasiado tarde...
Para comenzar revise tu código y pude notar que al momento de ingresar los datos lo haces desde la posición 1 del vector, el cual imprimias del mismo modo, bueno no esta mal, claro que funcionaba la primera vez, ya que insertabas la posición a[0] que no tenia dato, entonces cada vez que decias que si y llenar el vector desde adelante iba a pasar lo mismo reemplazabas siempre el a[0] xD. Entonces modifique tu insertar donde ingresabas la primera vez los datos y lo hice de la posicion 0 hasta donde elije el usuario, para que la insercion de datos sea correcta...

Al momento de ingresar nuevos datos modifique a[0]=nv; por un pequeño codigo con el cual hice que funcionará
He aqui el codigo:

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>

main()

{ int i,n=0,a[50]={0},resp=0,no,j,nv=0,opc=0,;
do{
cout<<endl;
cout<<"Cuantos elementos deseas ingresar ";
cin>>n;
cout<<endl;
for(i=0;i<n;i++){ //Lo inserte de forma normal desde 0
cout<<"ingresa "<<i<<": ";
cin>>a[i];
}
cout<<endl;
cout<<"La lista queda como"<<endl<<endl;
for(i=0;i<n;i++){ //Imprimir modificado de igual modo
cout<<a[i]<<",";
}

cout<<endl<<endl;
cout<<"___Deseas ingresar un valor a la lista___"<<endl;
cout<< " Ingresa *1* para___si o *2* para _no_"<<endl<<endl;
cin>>resp;

if(resp==1){
do{
cout<<"ingresa el siguiente valor"<<endl;
cin>>nv;

//Aqui modifque tu codigo

n++;

int temp=a[0];

a[0]=nv;

int temp2, temp3;
temp3=a[1];

for(i=1;i<=n;i++){
if(i==n) a[n] = temp3;
else{
temp2=a[i+1];
a[i+1]=temp3;
temp3=temp2;
}
}

a[1]=temp;

//termina la modificacion =)

for(i=0;i<n;i++){
cout<<a[i]<<",";

}

cout<<"deseas ingresar otro valor"<<endl<<endl;
cin>>opc;
}while(opc==1);

}

else {

cout<<"";
}

getch();
system("cls");

cout<<endl<<endl;
cout<<"Deseas realizar nuevamente la operacion con otros valores"<<endl;
cout<<endl;
cout<<"Ingresa *1* para --si-- o *2* para --no-- ";
cin>>opc;
}while(opc==1);

getch();

}


-Como veras tome en cuenta el tamaño del vector, como sabes al insertar un nuevo dato, el vector tendra otro n como limite, para que asi puedas imprimirlo, lo unico que hice fue iterarlo cada vez que se elegia insertar (n++)
-Luego antes de ingresar el nuevo valor en la posicion 0 me asegure de guardarlo en un temporal de nombre temp, para así guardar el a[0] antes de ser modificado por el nuevo valor insertado...
-Veras que hay dos variables que serán temporales dentro del ciclo o bucle siguiente, como ya se modifico a[0] con el nuevo valor, ahora almaceno del mismo modo a[1] en temp3.
-El for comienza en 1 ya que no es necesario comenzar de 0 porque ya se modifico, este va de 1 hasta ser exactamente igual a n.
-Dentro hay un if y un else, el if lo uso como restriccion en caso llegue i a ser igual a n, y esto por que? simplemente para evitar irme mas adelante, donde obviamente no hay nada, ya que como verás en el else se hace una serie intercambios de valores.
-El else es muy simple, lo unico que hice fue almacenar la siguiente posicion a la actual, ya que esta sera modificada por el valor actual, en a[i+1] = temp3, se modifica con el valor anterior (la primera vez recibe temp3 se inicializo con a[1], como esta arriba, y solo en la primera iteracion del for tomara ese valor), ahora aca entra en temp3=temp2 esto lo hago para dar uno nuevo valor a temp3, y a la siguiente vez que entre en el bucle, el temp3 aun mantendra el valor de temp2 de la anterior iteracion, con lo cual se asegura el cambio de valores.
-Finalmente a[1] es inicializado con el temp que tenia el valor de la posicion 0 inicial del vector

Espero haberte ayudado, si algo no quedo muy claro... preguntame
Suerte!!!
PD: Mire tan rápido tu código que hice la modificación de la inserción y no me había fijado de que llenabas desde 1, siempre el a[0] se actualizaba, ya me estaba asustando de porque no podia solucionar el problema =P jajaja

Etiquetas: programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:19.