Dev - C++ - Leer un archivo

 
Vista:
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Leer un archivo

Publicado por Char (20 intervenciones) el 20/10/2019 19:24:22
Hola necesito ayudo con el siguiente código, tengo que leer un archivo que vaya leyendo lo siguiente:

PUSH,1
PUSH,2
PUSH,3
POP,0
PUSH,4
PUSH,5
POP,0
PUSH,6
PUSH,7
POP,0
PUSH,8
PUSH,9
PUSH,10
POP,0
POP,0
POP,0
POP,0
PUSH,11
PUSH,12
PUSH,13

Pero no se como aplicarlo al código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//Insertar Elementos en la pila
 
#include<iostream>
#include<conio.h>
using namespace std;
 
struct Nodo{
	int dato;
	Nodo *siguiente;
};
 
void agregarPila(Nodo *&,int); //Prototipo de Funcion
void sacarPila(Nodo *&,int &);
 
int main(){
	Nodo *pila = NULL;
	int dato;
 
	cout<<"Digite un numero: ";
	cin>>dato;
	agregarPila(pila,dato);
 
	cout<<"Digite otro numero: ";
	cin>>dato;
	agregarPila(pila,dato);
 
	cout<<"\nSacando los elementos de la pila: ";
	while(pila != NULL){//Mientras no sea el final de la pila
		sacarPila(pila,dato);
		if(pila != NULL){
			cout<<dato<<" , ";
		}
 
	}
	getch();
	return 0;
}
 
void agregarPila(Nodo *&pila,int n){
	Nodo *nuevo_nodo = new Nodo(); //1. Crear el espacio en memoria para almacenar un nodo.
	nuevo_nodo->dato = n; //2. Cargar el valor dentro del nodo(dato).
	nuevo_nodo->siguiente = pila; //3. Cargar el puntero pila dentro del nodo(*siguiente).
	pila = nuevo_nodo; //4. Asignar el nuevo nodo a pila.
 
	cout<<"\tElemento "<<n<<" ha sido agregado a PILA correctamente"<<endl;
}
 
void sacarPila(Nodo *&pila,int &n){
	Nodo *aux = pila;
	n = aux -> dato;
	pila = aux -> siguiente;
	delete aux;
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Leer un archivo

Publicado por Alfil (1444 intervenciones) el 20/10/2019 21:01:31
Viendo el archivo que hay que leer no entiendo bien lo que hay que hacer...

¿PUSH y POP indican lo que hay que hacer con el número que aparece a continuación?, ¿o se introduce todo en la Pila?, ¿puedes poner un ejemplo de la entrada y salida esperada?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Leer un archivo

Publicado por Char (20 intervenciones) el 20/10/2019 22:26:26
Si, en el PUSH y POP indican lo que tengo que hacer con el numero que aparece delate de ellos, solo que lo tengo que poner en la pila leyéndolo desde un archivo.

Ejemplo:

Pongo 1 , 2 , 3 (Los PUSH)
Luego 2, 3 (Poniendo el POP '0')

Al final tengo que imprimir los números restantes después de todos los PUSH y POP
(8, 9, 10, 11, 12, 13).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Leer un archivo

Publicado por Alfil (1444 intervenciones) el 20/10/2019 22:34:54
¿Y el POP,0 que deberia hacer?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Leer un archivo

Publicado por Char (20 intervenciones) el 20/10/2019 23:42:28
El POP '0' tiene que ir borrando el elemento de la izquierda

Como en el ejemplo pongo los PUSH '1' '2' y '3' , la la hora de poner el POP borrar el '1' y solo quedaría '2' y '3'
O también podría agregar un '0' en la posición en la que esta el '1'.

Y hasta el final mostrar los PUSH que sobrevivieron.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 34
Ha disminuido su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Duda

Publicado por Char (20 intervenciones) el 21/10/2019 01:02:54
Disculpa una pregunta, para imprimir de forma recursiva la siguiente función con un nodo como lo haría, tengo una parte en el if, pero todas las ideas que he tenido siempre se me imprimen números de mas hasta llenar la pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
//Imprimir de forma recursiva
void imprimirLista(Lista *lista){
    Nodo *nodoActual;
    nodoActual = lista->cabeza;
 
    if(nodoActual->siguiente == NULL){
        printf ("%d ",nodoActual->valor);
    }else{
 
	}
    printf("\n");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Duda

Publicado por Alfil (1444 intervenciones) el 21/10/2019 11:17:54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
using namespace std;
 
struct Nodo{
	int dato;
	Nodo *siguiente;
};
 
typedef Nodo *ptrNodo;
 
void agregarPila( ptrNodo *ptrCima, int n );
void sacarPila( ptrNodo *ptrCima );
void imprimirPila( ptrNodo cursor );
 
int main(){
 
    ifstream in( "Lista.txt" );
    string s, t;
	Nodo *pila = NULL;
	int dato;
 
    while( !in.eof() ){
        getline( in, s, ',' );
        in >> dato;
        getline( in, t );  // leerr el salto de línea del fichero
 
        if( s == "PUSH" ){
            agregarPila( &pila, dato );
            imprimirPila( pila );
        } else {
            sacarPila( &pila );
            imprimirPila( pila );
        }
    }
 
	getch();
 
	return 0;
}
 
void agregarPila( ptrNodo *ptrCima, int n ){
 
	ptrNodo ptrNuevo;
    ptrNuevo = new Nodo;
 
    if ( ptrNuevo != NULL ) {
        ptrNuevo->dato = n;
        ptrNuevo->siguiente = *ptrCima;
        *ptrCima = ptrNuevo;
    }
 
	cout << "\tSe agrego: " << n << endl;
 
}
 
void sacarPila( ptrNodo *ptrCima ){
 
    ptrNodo ptrTemp;
    int valorElim;
 
    if( ptrCima != NULL )  {
        ptrTemp = *ptrCima;
        valorElim = (*ptrCima)->dato;
        *ptrCima = (*ptrCima)->siguiente;
        delete(ptrTemp);
 
        cout << "\tSe elimino: " << valorElim << endl;
    }else
        cout << "\n\tLa Pila esta vacia" << endl;
}
 
void imprimirPila( ptrNodo cursor )
{
    if( cursor == NULL ) {
        cout << "\n\tLa pila esta vacia\n";
    } else {
        cout << "\tLa pila es: " ;
 
        while( cursor != NULL ) {
           cout << cursor->dato << "->";
            cursor = cursor->siguiente;
        }
        cout << "NULL\n\n";
    }
    cout << endl;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda

Publicado por Monk (1 intervención) el 22/10/2019 23:15:31
¿Cómo sería el código para una cola, con esa información?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar