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ú

Temas - Beginner Web

#226
Programación C/C++ / liberar memoria(Resuelto)
6 Diciembre 2018, 18:51 PM
Resuleto!
Código (cpp) [Seleccionar]
//Definicion de la estructura lista
typedef struct tnodo *pnodo;
typedef struct tnodo{
char dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
};

void liberar_memoria(tlista &lista)
{
pnodo eliminado;
while(lista.inicio!=NULL){
eliminado=lista.inicio;
lista.inicio=eliminado->sig;
eliminado->sig=NULL;
delete(eliminado);
}
}

;-)
#227
Programación C/C++ / POO
4 Diciembre 2018, 00:25 AM
Hola estuve dos dias estudiando POO y vine para corroborar si aprendí o no POO, despues sigo pasando programas para que me den sus opiniones
Tengo la clase Racional el fichero racional.h
Código (cpp) [Seleccionar]
#ifndef RACIONAL_H
#define RACIONAL_H

#include <iostream>
#include <math.h>

using namespace std;

class racional{
public:
racional(int a2=0, int b2=0) : num(a2), den(b2) {}

void guardar(int a2, int b2);
void leer(int &a2, int &b2);

void suma(const racional, const racional);
void resta(const racional, const racional);
void potencia(const racional &, int valor);

float decimal(float d);

void mostrar();
private:
int num, den;
};

void racional::guardar(int a2, int b2)
{
num=a2;
den=b2;
}

void racional::leer(int &a2, int &b2)
{
a2=num;
b2=den;
}

void racional::suma(const racional Uno, const racional Dos)
{
num=Uno.num*Dos.den+Uno.den*Dos.num;
den=Uno.den*Dos.den;
}

void racional::resta(const racional Uno, const racional Dos)
{
num=Uno.num*Dos.den-Uno.den*Dos.num;
den=Uno.den*Dos.den;
}

void racional::potencia(const racional &R, int valor)
{
num=pow(R.num,valor);
den=pow(R.den,valor);
}

float racional::decimal(float d)
{
d=float(num)/float(den);
return d;
}

void racional::mostrar()
{
cout<<"Racional: "<<num<<"/"<<den<<endl;
}
#endif

Y el main
Código (cpp) [Seleccionar]
#include "racional.h"

int main()
{
racional uno(3,4), dos(1,4), tres;
float decimal;

tres.suma(uno,dos);
cout<<"Suma ";tres.mostrar();

tres.resta(uno,dos);
cout<<"Resta ";tres.mostrar();

tres.potencia(uno,3);
cout<<"Potencia ";tres.mostrar();

cout<<"Decimal: "<<uno.decimal(decimal)<<endl;

system("pause");
return 0;
}

A mi hay cositas que no me convence como el metodo potencia de la clase racional
#228
Bases de Datos / Defina el termino relacion
24 Noviembre 2018, 06:12 AM
MODELO RELACIONAL

Alguien sabe a que se refiere "Defina el termino de relacion": Una relacion del esquema relacional R(A1,A2...An) es un conjunto de n-tuplas r=(t1,t2...tn). Cada n-tupla t es una lista ordenada de n valores t=<v1,v2...vn> donde cada valor vi 1<=i<=n, es un elemento de dom(A) o bien un valor nulo especial.
Otra cosita mas, "Formalice un esquema de relacion y explique brevemente": Un esquema de relacion R denotado por R(A1,A2...An) esta constituido por un nombre de relacion R y una lista de atributos A1,A2..An. Cada atributo Ai es el nombre de un papel jugado por algun dominio D en el esquema de relacion R
En criollo(soy argentina) que significa?  :huh:
#229
Hola queria saber que es un varrel en diseño de base de datos relacionales?
#230
Programación C/C++ / Archivos
21 Noviembre 2018, 18:40 PM
Hola queria saber si es viable esta forma de cerrar dos veces el archivo, esto funciona 100% pero a mi no me gusta como queda, saludos
Código (cpp) [Seleccionar]
const int MAX=32;
typedef char tcad[MAX];
typedef FILE *archivo;
typedef struct usuario{
tcad nombre;
tcad apellido;
int edad;
...
};

void registrar_usuario_nuevo(archivo usuarios_de_facebook)
{
usuario nuevo;
usuarios_de_facebook=fopen("usuarios","ab+");
fflush(stdin);
cout<<"Ingrese nombre de usuario: ";
gets(nuevo.nombre);
fflush(stdin);
...
fclose(usuarios_de_facebook);
if(consultar_usuario(usuarios_de_facebook,nuevo.nombre)==false){
usuarios_de_facebook=fopen("usuarios.txt","ab");
fwrite(&nuevo,sizeof(nuevo),1,usuarios_de_facebook);
}
else
cout<<"Ya existe un usuario con ese nombre"<<endl;
fclose(usuarios_de_facebook);
}
#231
Alguien podria enseñarme a normalizar tablas en la primera, segunda y tercera forma?  :huh:
#232
Me surgio esa duda con arboles binarios  :huh:
#233
Programación C/C++ / que debo seguir aprendiendo?
15 Noviembre 2018, 23:27 PM
Tengo conocimientos basicos de programacion y deseo seguir aprendiendo pero no se por donde continuar, iba a empezar SFML, bueno enrealidad lo hare igual pero aparte de eso que puedo ir leyendo?
Estos son mis conocimientos en programacion basica
*Introduccion a la programación
*Estructuras de control, secuenciales y selectivas
*Estructuras de control repetitivas
*Modularidad
*Recursividad
*Arreglos(Operaciones basicas:Busqueda,ordenamiento etc);
*Registros
*TADs
*Listas
*Pilas
*Colas
*Arboles
*Grafos
*Archivos
*Introduccion a POO//Creo qque desde aqui verdad?Bueno y despues?
#234
Muy buenas a tod@s ,tengo alguno que otro problema con los recorridos en grafos, sigo un criterio y el algoritmo para recorrerlos pero algunos me salen tal cual y otros no, sera que el criterio que me piden no lo respeto? el criterio es izq,der,arriba,abajo :(

      2------  3
   /  |         / |
1    |      9    |
\    |  /   \    |
   \  | /      \   |
     8           7
     |______|

Bueno algo asi el grafo

Supuestamente el recorrido en amplitud empezando en 2 es : 2,1,8,3,9,7

Y yo al utilizar el criterio que ya mencione y respetando el algoritmo obtengo

2,1,3,8,7,9     

Respetando el criterio y el algoritmo
empty_q
2
1,3,8
3,8
8,7,9
7,9
9
empty_q
#235
Programación C/C++ / matriz de adyacencia
8 Noviembre 2018, 02:19 AM
Hola miren tengo una matriz de adyacencia que es la siguiente

M   1   2   3   4
1   'n'
    7
2           'j'
            12
3   'l'           'c'
    5             9
4      'q'
        7

Donde 'n' no se que es, ni como plasmarlo al grafico y 7 es el peso/costo de la arista entre 1 a 1
Me pide dibujar el grafo y definir una estructura para el mismo
Hice esto

Bueno 1 apunta a si mismo con un costo de 7 , 2 apunta a 3 con un costo de 12, 3 a 1 con coste 5, 3 a 4 con costo 9, 4 a 2 con costo 7, esto me da un digrafo e imagino que la estructura seria algo asi

Código (cpp) [Seleccionar]
const int NODOS=4;
typedef struct arco{
int peso;
char dato;//Aca estoy dudando;
};
typedef arco matriz_ady[NODOS][NODOS];
#236
Programación C/C++ / Grafos
7 Noviembre 2018, 01:44 AM
No entiendo bien la definicion de estructura de grafos utilizando listas enlazadas, masomenos lo entiendo pero ahora me perdi, alguien sabe? gracias?

Código (cpp) [Seleccionar]
typedef struct arco *parco;
typedef struct vertice *pvertice;
typedef struct arco{
float peso;
pvertice destino;
parco sigarco;
};
typedef struct vertice{
int id;
pvertice sigvertice;
parco lista_arco;
};
#237
Programación C/C++ / AVL Y B
1 Noviembre 2018, 14:12 PM
Alguien me ayuda con arboles AVL y B? Que me pasen un tutorial con el que se les haya sido facil entenderlo, porfis
#238
Hola, lei unos apuntes del secundario y todo el principio se referia a restricciones de semantica e integridad y ademas sobre el concepto de semantica e integridad, en terminos generales a que se refiere la semantica y la integridad? desde ya muchas gracias
#239
Bases de Datos / Base de Datos
26 Octubre 2018, 03:32 AM
Hola, no se si sea la sección correcta , perdon de antemano, bien, soy nueva en Base de Datos y quisiera saber si alguien me puede hacer una guia lo mas corta posible sobre el tema y que herramientas necesito para hacer mis bases de datos, quiero decir que lenguaje debo aprender y todo eso, actualmente ya se programar en C/C++ y Java
#240
Primero que nada hola, tengo el siguiente problema
Realice un algoritmo recursivo implementando el tda abb para invertir el orden de las silabas de las palabras de una frase pero no el orden de sus palabras, es decir si yo ingreso la palabra "maestro yi" me tendria que devolver "troesma yi" o "tinto" devolveria "totin" , realice una prueba de escritorio, es algo complicado si, pero no se como empezar  :(
#241
Programación C/C++ / funcion gotoxy
21 Octubre 2018, 20:35 PM
Hola miren estoy buscando la manera de mostrar el contenido de un arbol binario de busqueda de forma muy grafica por pantalla es decir de esta manera

               RAIZ
      12                  33
  6      15          51
      14   19

Tengo estos metodos pero a la hora de imprimir por pantalla se me superpone el mensaje
"Presione una tecla para continuar...." y no me gusta


Código (cpp) [Seleccionar]
void mostrar(pnodo arbol, int Y)
{
if(arbol!=NULL){
X+=5;
mostrar(arbol->izq,Y+2);
gotoxy(10+X-Y,15+Y);
cout<<arbol->dato<<endl;
mostrar(arbol->der,Y+2);
}
}

void gotoxy(int x, int y)
{
HANDLE hcon;
hcon=GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(hcon,pos);
}

Desde ya muchas gracias  ;-)
#242
Programación C/C++ / colas dobles
15 Octubre 2018, 03:56 AM
Hola, queria preguntarles que operaciones se de colas se modifican cuando usamos bicolas, tengo hecho esto pero no entiendo el comportamiento con arreglos con listas es mucho mas facil ayuda u.u  :(

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

const int MAX=6;
typedef int contenedor[MAX];
typedef struct tcola{
contenedor datos;
int final, frente;
};

void init_queue(tcola &q);
void push_queue(tcola &q, int nuevo, bool ultimo);
bool full_queue(tcola q);
bool empty_queue(tcola q);
int pop_queue(tcola &q);
int top_queue(tcola q);
int bottom_queue(tcola q);
int next(int indice);
int prev(int indice);

int main()
{
int dato;
tcola q;
bool opcion;
init_queue(q);
while(full_queue(q)==false){
cout<<"Ingrese dato: ";
cin>>dato;
cout<<"1. Agregar por final"<<endl;
cout<<"0. Agregar por frente"<<endl;
cin>>opcion;
push_queue(q,dato,opcion);
}
q.frente=MAX-1;
q.final=MAX-2;
while(empty_queue(q)==false){
cout<<pop_queue(q);
}
cout<<endl;
system("pause");
}

void init_queue(tcola &q)
{
q.final=MAX-1;
q.frente=MAX-1;
}

void push_queue(tcola &q, int nuevo, bool ultimo)
{
if(full_queue(q)==true)
cout<<"COLA LLENA"<<endl;
else{
if(ultimo==true){
q.final=next(q.final);
q.datos[q.final]=nuevo;
}
else{
q.frente=prev(q.frente);
q.datos[q.frente]=nuevo;
}
}
}

bool full_queue(tcola q)
{
return next(q.final)==q.frente;
}

bool empty_queue(tcola q)
{
return q.frente==q.final;
}

int pop_queue(tcola &q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q.frente=next(q.frente);
aux=q.datos[q.frente];
}
return aux;
}

int top_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[next(q.frente)];
}
return aux;
}

int bottom_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[q.final];
}
return aux;
}

int next(int indice)
{
if(indice==MAX-1)
indice=0;
else
indice++;
return indice;
}

int prev(int indice)
{
if(indice==0){
indice=MAX-1;
}
else{
indice--;
}
return indice;
}
#243
Hola tengo que invertir un numero utilizando colas el problema es que cuando ingreso numeros con mas de 2 cigras me devuelve datos erroneos , si ingreso un 23 devuelve 32, si ingreso 321 me devuelve 1203 y asi, no se si mi algoritmo esta mal planteado o que, el "algoritmo" esta en el programa principal, desde ya gracias
Ya lo solucione  ;-)

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

const int MAX=20;
typedef int contenedor[MAX];
typedef struct tcola{
contenedor datos;
int final, frente;
};

void init_queue(tcola &q);
void push_queue(tcola &q, int nuevo);
bool full_queue(tcola q);
bool empty_queue(tcola q);
int pop_queue(tcola &q);
int top_queue(tcola q);
int bottom_queue(tcola q);
int next(int indice);

int main()
{
int numero, inverso=0, i=-1;
tcola q;
init_queue(q);
cout<<"Ingrese numero: ";
cin>>numero;
while(numero>0){
push_queue(q,numero%10);
numero/=10;
i++;
}
while(empty_queue(q)==false){
inverso+=pop_queue(q)*pow(10.0.i);
i--;
}
cout<<"Inverso: "<<inverso<<endl;
system("pause");
}

void init_queue(tcola &q)
{
q.final=MAX-1;
q.frente=MAX-1;
}

void push_queue(tcola &q, int nuevo)
{
if(full_queue(q)==true)
cout<<"COLA LLENA"<<endl;
else{
q.final=next(q.final);
q.datos[q.final]=nuevo;
}
}

bool full_queue(tcola q)
{
return next(q.final)==q.frente;
}

bool empty_queue(tcola q)
{
return q.frente==q.final;
}

int pop_queue(tcola &q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q.frente=next(q.frente);
aux=q.datos[q.frente];
}
return aux;
}

int top_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[next(q.frente)];
}
return aux;
}

int bottom_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q.datos[q.final];
}
return aux;
}

int next(int indice)
{
if(indice==MAX-1)
indice=0;
else
indice++;
return indice;
}


#244
Programación C/C++ / colas
14 Octubre 2018, 00:19 AM
hola, miren tengo q representar una cola de datos mediante un arreglo, donde las primeras tres posiciones son para los 2 indices y un contador de elementos, este contador de elementos me sirve para saber si la cola esta llena o vacia, todo anda perfecto, pero cuando hago una llamada a top_que(cola); me modifica en algo mi metodo pop_queue(cola);
Supongamos no llamo en ningun momento a top_queue(cola) y pongo datos de entrada
1 2 3 4 5 6 7 8 9
Muestra por pantalla
Final cola: 9;
Cantidad elementos: 9;
1 2 3 4 5 6 7 8 9;//Mientras cola no vacia cout<<pop_queue(cola);

Y suponiendo que yo antes  de vaciar la cola hubiese llamado a top_queue(cola); me sale esto

Frente cola:1;
Final cola:9;
Cantidad de elementos: 9;
234567891// Y esto es lo que me esta volviendo loca  :-\

Aqui el codigo
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

const int MAX=12;
typedef int tcola[MAX];

void init_queue(tcola &q);
void push_queue(tcola &q, int nuevo);
bool full_queue(tcola q);
bool empty_queue(tcola q);
int pop_queue(tcola &q);
int top_queue(tcola q);
int bottom_queue(tcola q);
int elements(tcola q);
int next(int indice);

int main()
{
int dato;
tcola q;
init_queue(q);
while(full_queue(q)==false){
cout<<"Ingrese dato: ";
cin>>dato;
push_queue(q,dato);
}
//cout<<top_queue(q)<<endl; //Sacar barras para el error
cout<<bottom_queue(q)<<endl;
cout<<elements(q)<<endl;
while(empty_queue(q)==false){
cout<<pop_queue(q);
}
cout<<endl;
}

void init_queue(tcola &q)
{
q[0]=MAX-1;//Final de la cola
q[1]=MAX-1;//Frente de la cola
q[2]=0;//Contador de datos
}

void push_queue(tcola &q, int nuevo)
{
if(full_queue(q)==true)
cout<<"COLA LLENA"<<endl;
else{
q[0]=next(q[0]);
q[q[0]]=nuevo;
q[2]++;
}
}

bool full_queue(tcola q)
{
return q[2]==MAX-3;
}

bool empty_queue(tcola q)
{
return q[2]==0;
}

int pop_queue(tcola &q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q[1]=next(q[1]);
aux=q[q[1]];
q[2]--;
}
return aux;
}

int top_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q[1]=next(q[1]);//<----ERROR
aux=q[q[1]];//<----ERROR (Reemplazar estas dos lineas por aux=q[next(q[1])];
}
return aux;
}

int bottom_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q[q[0]];
}
return aux;
}

int elements(tcola q)
{
return q[2];
}

int next(int indice)
{
if(indice==MAX-1)
indice=3;
else
indice++;
return indice;
}


Ya encontre el error, estaba en el modulo de top_queue(q);  ;-)
#245
Programación C/C++ / SFML
13 Octubre 2018, 07:42 AM
Alguna buena guia para hacer un juego 2D, alguien que haya hecho uno?  si es cortito mejor  ;-)
#246
Hola, queria saber que IDE se esta utilizando actualmente si es free o de pago, yo estoy utilizando el DEV C++ Ver 5.11 y Netbeans 8..12 para el Java y demas; mas que nada queria saber cual me recomiendan para programar videojuegos simples  RPG, bomberman , megaman o sea en 2D y tambien alguna libreria o motor para esto, tambien quiero  hacer aplicaciones para Windows mas que nada para entretenerme en vacaciones y no se que mas, bueno eso.  :huh:
#247
Hola, mi prodecimiento no modifica el registro tal, luego de modificarlo me guarda cualquier cosa, el problema estara en el procedimiento de carga? puse fflush(stdin); por todas partes;
Código (cpp) [Seleccionar]
void modificar(parchivo docentes, int codigo)
{
tdocente d;
bool encontrado=false;
docentes=fopen("docentes.txt","r+");
if(docentes==NULL){
cout<<"No se pudo abrir el archivo"<<endl;
}
else{
while(!feof(docentes) && !encontrado){
fread(&d,sizeof(d),1,docentes);
if(!feof(docentes) && codigo==d.legajo){
encontrado=true;
}
}
if(encontrado==false){
cout<<"Docente no encontrado"<<endl;
}
else{
cargar(d);
fseek(docentes,-sizeof(d),1);
fwrite(&d,sizeof(d),1,docentes);
}
}
fclose(docentes);
}
 :huh:
#248
Programación C/C++ / Archivos binarios
5 Octubre 2018, 11:49 AM
Hola, miren no se que estoy haciendo mal a  la hora de agregar un nuevo registro, quiero que guardar registros de alumnos teniendo en cuenta que sus codigo de alumno no se deben repetir, no se que estoy haciendo mal  :(

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

typedef char tcad[50];
typedef struct talumno{
int libreta;
tcad nombre;
tcad carrera;
};
typedef FILE *parchivo;

void carga(talumno &a);
void cargar_alumnos(parchivo alumnos);
void mostrar(parchivo alumnos);
void borrar(parchivo alumnos, int buscado);
bool consulta(parchivo alumnos, int codigo);

main()
{
int codigoBuscado;
parchivo estudiantes;
cargar_alumnos(estudiantes);
mostrar(estudiantes);
cout<<"Buscar alumno, ingrese LU: ";cin>>codigoBuscado;
borrar(estudiantes,codigoBuscado);
system("pause");
}

void carga(talumno &a)
{
fflush(stdin);
cout<<"Ingrese LU: ";cin>>a.libreta;
fflush(stdin);
cout<<"Ingrese nombre: ";gets(a.nombre);
fflush(stdin);
cout<<"Ingrese carrera: ";gets(a.carrera);
fflush(stdin);
}

void cargar_alumnos(parchivo alumnos)
{
talumno a;
int cantidad;
alumnos=fopen("alumnos.txt","wb");//Modo escritura, se pierde el contenido, si no existe el archivo lo crea
cout<<"Cuantos registros desea guardar?: ";cin>>cantidad;
while(cantidad>0){
carga(a);
if(consulta(alumnos,a.libreta)==false){
fwrite(&a,sizeof(a),1,alumnos);
cantidad--;
}
else{
cout<<"YA EXISTE UN USUARIO CON LA MISMA LIBRETA"<<endl;
}
}
fclose(alumnos);
}

void mostrar(parchivo alumnos)
{
talumno a;
alumnos=fopen("alumnos.txt","rb");//Apertura solo modo escritura
if(alumnos==NULL){
cout<<"Archivo inexistente"<<endl;
}
else{
while(!feof(alumnos)){
fread(&a,sizeof(a),1,alumnos);
if(!feof(alumnos)){
cout<<a.libreta<<endl;
cout<<a.nombre<<endl;
cout<<a.carrera<<endl;
}
}
}
fclose(alumnos);
}

void borrar(parchivo alumnos, int buscado)//Copia todos los alumnos excepto uno en especifico y lo guarda en otro archivo temporal
{
talumno a;
parchivo aux;
alumnos=fopen("alumnos.txt","rb");
aux=fopen("temporal.txt","wb");
if(alumnos!=NULL){
while(!feof(alumnos)){
fread(&a,sizeof(a),1,alumnos);
if(a.libreta!=buscado && !feof(alumnos)){
fwrite(&a,sizeof(a),1,aux);
}
}
fclose(aux);
fclose(alumnos);
}
if(remove("alumnos.txt")==0){//Desde aqui borra el archivo original y renombra el archivo temporal a "alumnos.txt"
cout<<"ELIMINADO EXITOSAMENTE"<<endl;
if(rename("temporal.txt","alumnos.txt")==0){
cout<<"RENOMBRADO EXITOSAMENTE"<<endl;
}
else{
cout<<"ERROR AL RENOMBRAR"<<endl;
}
}
else{
cout<<"ERROR AL ELIMINAR"<<endl;
}
}

bool consulta(parchivo alumnos, int codigo)
{
talumno a;
bool existe=false;
alumnos=fopen("alumnos.txt","rb");
if(alumnos!=NULL){
while(!feof(alumnos) && existe==false){
fread(&a,sizeof(a),1,alumnos);
if(a.libreta==codigo){
existe=true;
}
}
}
fclose(alumnos);
return existe;
}
#249
El otro dia llegue a entenderlo pero hoy me olvide, se me hace algo confuso ese signo de exclamacion  :huh:
Código (cpp) [Seleccionar]
while consulta(file archivo, int codigo)
{
...
bool existe=false;
if(archivo==NULL){
...
}
else{
while(!feof(archivo) && !existe){// En castellano como seria este recorrido? Mientras no sea final del archivo y ...?
...
}
}
}
#250
Programación C/C++ / Archivos
2 Octubre 2018, 21:25 PM
Alguna form de leer estos tipos de archivos sin conocer su/s registros?  :huh:

NùÄÜ
¢Ð
Cå3øÐáÍÓæúãƒ5A¦3ø³íLŒ¸Û   Ò¦vS'º¤úM‰¡­y ¤fA–ص/ÉóþSô‡vZ±U—÷˜µLű¯ ª¦bk7òÒÀ¤EŒÄ¯³ÐoJâÀǵ
#251
Queria saber si esto es C puro o C++ o ambos, parece un poco de C

Código (cpp) [Seleccionar]
void buscar(parchivo prod, int cod)
{
bool encontrado=false;
tprod p;
prod=fopen("prod.txt","r");
while(!feof(prod) && !encontrado){//Tambien quiero saber que esta preguntando ese !encontrado y porque
fread(&p,sizeof(p),1,prod);
if(p.codigo==cod){
mostrar(p);//Procedimiento que muestra el contenido del registro
encontrado=true;
}
}
if(encontrado==false){
cout<<"NO ENCONTRADO"<<endl;
fclose(prod);
}
}
#252
Hola quiero hacer un procedimiento recursivo que me cuente los valores negativos de una lista circular simple con un puntero, alguien me ayuda?

Código (cpp) [Seleccionar]
void contar_negativos(pnodo lista, int &n)
{
if(lista->sig!=lista){
if(lista->dato<0){
n++;
}
contar_negativos(lista->sig,n);
}
}
#253
Quisiera saber si hay una forma mas facil de sacar el tipo de clasede IP teniendo en cuenta que las IP que van de 10.0.0.0 a 10.255.255.255 son de clase A, de 172.16.0.0 a 172.31.255.255 son  de clase B y de 192.168.0.0 a 192.168.255.255 son de clase C, que puedo hacer chicos soy nueva en esto

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

const int MAX=4;
typedef int ip[MAX];

void direccion_ip();
bool validar_ip(ip miip);
void tipo_ip(ip miip);
void mostrar_ip(ip miip);

int main()
{
direccion_ip();
system("pause");
}

void direccion_ip()
{
ip miip;
cout<<"Ingrese direccion ip"<<endl;
for(int i=0;i<MAX;i++){
cin>>miip[i];
}
if(validar_ip(miip)==true)
tipo_ip(miip);
else
cout<<"La ip ingresada no es valida"<<endl;
mostrar_ip(miip);
}

bool validar_ip(ip miip)
{
bool validado=true;
for(int i=0;i<MAX;i++){
if(miip[i]<0 || miip[i]>255){
validado=false;
}
}
return validado;
}

void tipo_ip(ip miip)
{
if(miip[0]==10 && miip[1]>=0 && miip[1]<=255 && miip[2]>=0 && miip[2]<=255 && miip[3]>=0 && miip[3]<=255){
cout<<"Clase A"<<endl;
}
else
         if(miip[0]==172 && miip[1]>=16 && miip[1]<=31 && miip[2]>=0 && miip[2]<=255 && miip[3]>=0 && miip[3]<=255){
   cout<<"Clase B"<<endl;
         }
else
            if(miip[0]==192 && miip[1]==168 && miip[2]>=0 && miip[2]<=255 && miip[3]>=0 && miip[3]<=255){
  cout<<"Clase C"<<endl;
            }
else
               cout<<"No pertenece a ninguna clase."<<endl;
}

void mostrar_ip(ip miip)
{
for(int i=0;i<MAX;i++){
cout<<miip[i];
if(i<MAX-1){
cout<<".";
}
}
cout<<endl;
}
#254
Programación C/C++ / Pilas
26 Septiembre 2018, 04:20 AM
Hola a todos, aqui de nuevo, segun esta definicion de datos no entiendo como seria la implementacion de esta estructura de datos de tipo pila, todas las operaciones de pila con registros, arreglos y listas ya las se emplear, salvo esta estructura en particular, alguien me ayuda?
Código (cpp) [Seleccionar]
const int MAX=10;
typedef int contenedor[MAX];
typedef struct tpila{
contenedor datos1;
contenedor datos2;
};//La primera posicion del segundo arreglo se utiliza como cima


#255
Hola a tod@s, acabo de hacer un metodo para calcular los dias transcurridos desde el 1 de Enero de ese año, teniendo en cuanta que la fecha pasada por parametro esta validada, se que este metodo funciona pero me gustaria saber si hay otras formas mas simples de implementarlo? Me siento tonta :-\
Gracias!!  ;-)
Código (cpp) [Seleccionar]
void calcular_dias(t_fecha n)
{
int dias=0, m[11]={31,28,31,30,31,30,31,31,30,31,30};
switch(n[1]){
case 1: dias+=n[0];break;
case 2: dias+=m[0]+n[0];break;
case 3: dias+=m[0]+m[1]+n[0];break;
case 4: dias+=m[0]+m[1]+m[2]+n[0];break;
case 5: dias+=m[0]+m[1]+m[2]+m[3]+n[0];break;
case 6: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+n[0];break;
case 7: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+n[0];break;
case 8: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+n[0];break;
case 9: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+n[0];break;
case 10: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+n[0];break;
case 11: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+n[0];break;
case 12: dias+=m[0]+m[1]+m[2]+m[3]+m[4]+m[5]+m[6]+m[7]+m[8]+m[9]+m[10]+n[0];break;
}
if(n[2]%4==0 && n[1]>2){
dias++;
}
cout<<"Dias transcurridos desde el 1 de Enero: "<<dias<<endl;
}
#256
Buenas no entiendo el comportamiento de este procedimiento y mas precisamente en el ciclo for

Código (cpp) [Seleccionar]
typedef struct tnodo *pnodo;//Estructura de la lista
typedef struct tnodo{
int dato;
pnodo sig;
};

pnodo quitar_nodo(pnodo &lista, int valor)//Metodo quitar nodo
{
pnodo borrado, i;
if(lista==NULL){
borrado=NULL;
}
else{
if(lista->dato==valor){
borrado=lista;
lista=borrado->sig;
borrado->sig=NULL;
}
else{
for(i=lista;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);//De aqui en adelante no lo tengo bien en claro, se como lo hace pero el codigo me es incomprensible
if(i->sig!=NULL){
borrado=i->sig;
i->sig=borrado->sig;
borrado->sig=NULL;
}
else{
borrado=NULL;
}
}
}
return borrado;
}

Alguien que me lo explique en cristiano por favor?  ;-)
#257
Hola a todos, si bien esta es una de las formas mas facil de mostrar por pantalla los datos de una lista circular, pero yo queria saber si esto se puede realizar con un ciclo for porque la verdad no lo se  :huh:
Aqui abajo les dejo el procedimiento de mostrar_lista();
Código (cpp) [Seleccionar]
void mostrar(tlista lista)
{
pnodo i=lista.inicio;
if(lista.inicio!=NULL){
do{
cout << "Nodo: " << i->dato << endl;
i=i->sig;
}while(i!=lista.inicio);
}
else{
cout << "LISTA VACIA" << endl;
}
}
#258
Buenas a todos, queria saber mas que nada cuanta informacion en bytes puede guardar un espacio en memoria creada al usar un nuevo nodo con
Código (cpp) [Seleccionar]
new, yo se que puede almacenarse un registro grandecito y bueno que pasaria si meto registros enormes mas que nada saber cuandos bytes es un espacio en memoria  :huh:
#259
Programación C/C++ / Ciclos for en listas
10 Septiembre 2018, 20:08 PM
Alguien podria explicarme que es lo que hacen estos ciclos en las siguientes listas?

LISTAS SIMPLES
Código (cpp) [Seleccionar]
for(i=lista;!=NULL;i=i->sig);
Código (cpp) [Seleccionar]
for(i=lista.inicio;i->sig!=NULL;i=i->sig);
i->sig=nuevo;

Código (cpp) [Seleccionar]
for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
El ultimo es de una lista circular simple con dos punteros al inicio y al final
#260
Bueno la verdad no se porrque no me realiza el cambio para poder asi invertir la lista con el metodo burbuja y otra cosilla, si hay alguna otra forma de invertir la lista sin acudir a otra y respetando que es lista simplemente enlazada con 2 apuntadores estaria muy agradecid

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
char dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
};
char matrix[4][4]={{'a','b','c','d'},{'e','f','g','h'},{'i','j','k','l'},{'m','n','o','p'}};

void inicia(tlista &lista);
void agregar_final(tlista &lista, pnodo nuevo);
void copiarContenido(tlista &lista);
void invertirLista(tlista &lista);
void mostrar(tlista lista);

int main()
{
tlista milista;
pnodo nuevonodo;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "*MATRIZ*" << endl;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << "1. Iniciar lista" << endl;
cout << "2. Copiar contenido de la matriz a la lista" << endl;
cout << "3. Invertir el orden de la lista" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: copiarContenido(milista); break;
case 3: invertirLista(milista); break;
case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;

}

void agregar_final(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
lista.final->sig=nuevo;
lista.final=nuevo;
}
}

void copiarContenido(tlista &lista)
{
pnodo nuevo;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
nuevo=new tnodo;
if(nuevo!=NULL){
nuevo->dato=matrix[i][j];
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
if(nuevo!=NULL){
agregar_final(lista,nuevo);
}
}
}
}

void invertirLista(tlista &lista)
{
pnodo i, j;
char buscado, aux;
bool ordenado=true;
buscado=lista.inicio->dato;
while(ordenado){
if(lista.inicio->dato==buscado){
ordenado=false;
}
else{
for(i=lista.inicio;i->sig!=NULL;i=i->sig){
j=i->sig;
aux=i->dato;
i->dato=j->dato;
j->dato=aux;
}
}
}
}

void mostrar(tlista lista)
{
pnodo i;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=NULL;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}


Y una ultiam cosilla, debo hacer otro modulo donde debo liberar el espacio de memoria de todos los nodos , al pareceer debo hacerlo nodo por nodo o liberar todo el espacio en memoria ocupado por la lista completea si alguien sabe ;)
#261
Hola chavales, queria que me dijeran que estoy haciendo mal en este programa, deseo eliminar el ultimo nodo de la lsita circular y creo, creo que mi error esta en no declarar bien los apuntadores de inicio y final de la lista y el metodo de borrar ultimo nodo tambien me falla al parecer  :huh:

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
int contador;
};
void inicia(tlista &lista);
void crear(pnodo &nuevo);
void agregar_inicio(tlista &lista, pnodo nuevo);
pnodo quitar_final(tlista &lista);
void mostrar(tlista lista);

int main()
{
tlista milista;
pnodo nuevonodo, eliminado;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar al inicio" << endl;
cout << "3. Quitar al final" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 3: eliminado=quitar_final(milista); if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;}break;
case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;
lista.contador=0;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;

}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_inicio(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
lista.contador++;
}

pnodo quitar_final(tlista &lista)
{
pnodo borrado, i;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
for(i=lista.inicio;(i->sig)->sig!=lista.final->sig;i=i->sig)
borrado=lista.final;
lista.final=i;
lista.final->sig=lista.inicio;
}
lista.contador--;
}
return borrado;
}

void mostrar(tlista lista)
{
pnodo i;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=lista.final->sig;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
cout << "Cantidad de elementos: " << lista.contador << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}





Me he quemado la cabeza tratando de eliminar el ultimo elemento de la lista circular la logica la tengo pero no se como programarlo  :huh:
Y al mostrar lista queria hacerlo con un for pero tampoco pude asi que use un do{}while(); Si alguien sabe codificacion en C++ me dice como es la cosa con borrar ultimo elemento de la lista circular , no hace falta que me explique de logica, muchas gracias  ;-)

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
int contador;
};
void inicia(tlista &lista);
void crear(pnodo &nuevo);
void agregar_inicio(tlista &lista, pnodo nuevo);
pnodo quitar_final(tlista &lista);
void mostrar(tlista lista);

int main()
{
tlista milista;
pnodo nuevonodo, eliminado;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar al inicio" << endl;
cout << "3. Quitar al final" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break;
case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;
lista.contador=0;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;

}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_inicio(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
lista.final->sig=lista.inicio;
}
else{
lista.final->sig=nuevo;
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
lista.contador++;
}

pnodo quitar_final(tlista &lista)
{
pnodo borrado, i;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
for(i=lista.inicio;i!=lista.final;i=i->sig);
borrado=lista.final;
i->sig=lista.inicio;
lista.final=i;
}
lista.contador--;
}
return borrado;
}

void mostrar(tlista lista)
{
pnodo i;
bool seguir=true;
if(lista.inicio!=NULL){
i=lista.inicio;
while(seguir){
cout << "Nodo: " << i->dato << endl;
if(i==lista.final){
seguir=false;
}
i=i->sig;
}
}
else{
cout << "LISTA VACIA" << endl;
}
}





Chicos lo acabo de resolver miren, porque nadie me lo dijo antes?

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
int contador;
};
void inicia(tlista &lista);
void crear(pnodo &nuevo);
void agregar_inicio(tlista &lista, pnodo nuevo);
pnodo quitar_final(tlista &lista);
void mostrar(tlista lista);

int main()
{
tlista milista;
pnodo nuevonodo, eliminado;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar al inicio" << endl;
cout << "3. Quitar al final" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 3: eliminado=quitar_final(milista);if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}; break;
case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;
lista.contador=0;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_inicio(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
nuevo->sig=nuevo;//Hasta aca se que esta bien;
}
else{
lista.final->sig=nuevo;
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
lista.contador++;
}

pnodo quitar_final(tlista &lista)
{
pnodo borrado, i;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
for(i=lista.inicio;(i->sig)->sig!=lista.inicio;i=i->sig);
borrado=lista.final;
lista.final=i;
lista.final->sig=lista.inicio;
}
lista.contador--;
}
return borrado;
}

void mostrar(tlista lista)
{
pnodo i;
bool seguir=true;
if(lista.inicio!=NULL){
i=lista.inicio;
while(seguir){
cout << "Nodo: " << i->dato << endl;
if(i==lista.final){
seguir=false;
}
i=i->sig;
}
}
else{
cout << "LISTA VACIA" << endl;
}
}





Mod: Prohibido el doble o triple post. Usa el botón "Modificar".
#262
Programación C/C++ / Ayuda con listas
3 Septiembre 2018, 01:56 AM
Hola nuevamente, tengo 2 fallos en las funciones quitar_final() y quitar_nodo(); No se cual sea el problema algo debo estar haciendo mal o sera el sueño no se  :huh:

Aqui os dejo el codigo completo

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo final;
};

void inicia(tlista &lista);
void crear(pnodo &nuevo);
void agregar_inicio(tlista &lista, pnodo nuevo);
void agregar_final(tlista &lista, pnodo nuevo);
void agregar_orden(tlista &lista, pnodo nuevo);
pnodo quitar_inicio(tlista &lista);
pnodo quitar_final(tlista &lista);
pnodo quitar_nodo(tlista &lista, int valor);
bool buscar_nodo(tlista lista,int valor);
void mostrar(tlista lista);

int main()
{
tlista milista;
pnodo nuevonodo, eliminado;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar al inicio" << endl;
cout << "3. Agregar al final" << endl;
cout << "4. Agregar en orden" << endl;
cout << "5. Quitar al inicio" << endl;
cout << "6. Quitar al final" << endl;
cout << "7. Quitar valor" << endl;
cout << "8. Buscar valor" << endl;
cout << "9. Mostrar lista" << endl;
cout << "10. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 3: crear(nuevonodo); if(nuevonodo!=NULL){agregar_final(milista,nuevonodo);}; break;
case 4: crear(nuevonodo); if(nuevonodo!=NULL){agregar_orden(milista,nuevonodo);}; break;
case 5: eliminado=quitar_inicio(milista);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 6: eliminado=quitar_final(milista);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 7: cout << "Igrese valor a eliminar: "; cin >> num; eliminado=quitar_nodo(milista,num);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}
else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 8: cout << "Ingrese valor buscado: "; cin >> num;
if(buscar_nodo(milista,num)==true){cout << "VALOR ENCONTRADO" << endl;}
else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 9: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 10: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=10);
}

void inicia(tlista &lista)
{
lista.inicio=NULL;
lista.final=NULL;

}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_inicio(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
}

void agregar_final(tlista &lista, pnodo nuevo)
{
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
lista.final->sig=nuevo;
lista.final=nuevo;
}
}

void agregar_orden(tlista &lista, pnodo nuevo)
{
pnodo i;
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.final=nuevo;
}
else{
if(nuevo->dato<lista.inicio->dato){
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
else{
if(nuevo->dato>lista.final->dato){
lista.final->sig=nuevo;
lista.final=nuevo;
}
else{
for(i=lista.inicio;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig){
nuevo->sig=i->sig;
i->sig=nuevo;
}
}
}
}
}

pnodo quitar_inicio(tlista &lista)
{
pnodo borrado;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
borrado=lista.inicio;
lista.inicio=borrado->sig;
borrado->sig=NULL;
}
}
return borrado;
}

pnodo quitar_final(tlista &lista) //ERROR
{
pnodo borrado, i;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio==lista.final){
borrado=lista.inicio;
lista.inicio=NULL;
lista.final=NULL;
}
else{
for(i=lista.inicio;(i->sig)->sig!=NULL;i=i->sig);
borrado=lista.final;
lista.final->sig=NULL;
}
}
return borrado;
}

pnodo quitar_nodo(tlista &lista, int valor) //ERROR
{
pnodo borrado, i;
if(lista.inicio==NULL){
borrado=NULL;
}
else{
if(lista.inicio->dato==valor){
borrado=lista.inicio;
if(lista.inicio==lista.final){
lista.inicio=NULL;
lista.final=NULL;
}
else{
lista.inicio=NULL;
borrado->sig=NULL;
}
}
else{
for(i=lista.inicio;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);
if(i->sig!=NULL){
borrado=NULL;
}
else{
borrado=i->sig;
borrado->sig=NULL;
}
}
}
return borrado;
}

bool buscar_nodo(tlista lista,int valor)
{
pnodo i;
bool encontrado=false;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=NULL && encontrado==false;i=i->sig){
if(i->dato==valor){
encontrado=true;
}
}
}
return encontrado;
}

void mostrar(tlista lista)
{
pnodo i;
if(lista.inicio!=NULL){
for(i=lista.inicio;i!=NULL;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}
#263
Programación C/C++ / Pequeña duda sobre recursion
3 Septiembre 2018, 00:33 AM
Hola chavales tengo una pequeña duda acerca de este fragmento de codigo que a mi  parecer lo que hace es verificar si la lista esta vacia, caso contrario me devuelve la posicion en memoria del ultimo elemento de la lsita o me equivoco??  :huh:

Código (cpp) [Seleccionar]
pnodo desconocido(pnodo lista)
{
if(lista==NULL || lista->sig==NULL){
return lista;
}
else{
return desconocido(lista->sig);
}
}
#264
Hola, queria saber como puedo alterar el orden de una lista enlazada simple me piden lo siguiente, sin utilizar listas auxiliares, hacer una operacion donde los nodos se modifiquen segun espefica el usuario

LISTA ORIGINAL: LUNES->MARTES->MIERCOLES->JUEVES->VIERNES->SABADO->DOMINGO
Dia especificado por el usuario: JUEVES
LISTA MODIFICADA: JUEVES->VIERNES->SABADO->DOMINGO->LUNES->MARTES->MIERCOLES

He intentado ir agregando al final de la lista original los datos que son diferentes al dato especificado por el usuario y borrando el elemento inicial de la lista pero no tuve exito aca dejo el programa solo fijense en el modulo que se llama void modificar_lista(pnodo &lista)

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

typedef char tcad[16];
typedef struct tnodo *pnodo;
typedef struct tnodo{
tcad dato;
pnodo sig;
};

void inicia(pnodo &lista);
void crear(pnodo &nuevo);
void agregar_final(pnodo &lista, pnodo nuevo);
pnodo quitar_inicio(pnodo &lista);
void modificar_lista(pnodo &lista);
void mostrar(pnodo lista);

int main()
{
pnodo milista, nodo;
int opcion;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar elementos a la lista" << endl;
cout << "3. Modificar lista" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nodo); if(nodo!=NULL){agregar_final(milista,nodo);}; break;
case 3: modificar_lista(milista); break;
case 4: cout << "***LISTA***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(pnodo &lista)
{
lista=NULL;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese dato: "; cin >> nuevo->dato;
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_final(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL){
lista=nuevo;
}
else{
for(i=lista;i->sig!=NULL;i=i->sig);
i->sig=nuevo;
}
}

pnodo quitar_inicio(pnodo &lista)
{
pnodo borrado;
if(lista==NULL){
borrado=NULL;
}
else{
borrado=lista;
lista=lista->sig;
borrado->sig=NULL;
}
return borrado;
}

void modificar_lista(pnodo &lista)
{
pnodo i;
tcad buscado;
cout << "Ingrese dia de la semana: "; cin >> buscado;
for(i=lista;i!=NULL;i=i->sig){
if(strcmp(i->dato,buscado)!=0){
agregar_final(lista,i);
delete(quitar_inicio(lista));
}
else{
break;
}
}
}

void mostrar(pnodo lista)
{
pnodo i;
if(lista!=NULL){
for(i=lista;i!=NULL;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}
#265
Programación C/C++ / Ayuda con recursividad
2 Septiembre 2018, 00:07 AM
Hola, necesito una ayuda , non puedo sumar los valores de una lista enlazada simple la cual tiene un apuntador de inicio, dejo al estructura y la funcion recursiva que logre hasta ahora

Código (cpp) [Seleccionar]
typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
};


Código (cpp) [Seleccionar]
int sumar(tlista lista)
{
pnodo i;
if(lista.inicio==NULL){
return 0;
}
else{
return lista.inicio->dato+sumar(i=i->sig);
}
}


;-)
#266
Hola picolos bambinos, alguien me podria decir porque mi metodo de ordenacion seleccion en listas simplemente enlazadas no funciona?

void ordenar_lista(pnodo &lista)//Este es el modulo ->

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};

void inicia(pnodo &lista);
void crear(pnodo &nuevo);
void agregar_final(pnodo &lista, pnodo nuevo);
void ordenar_lista(pnodo &lista);
void mostrar(pnodo lista);

int main()
{
pnodo milista, nuevo;
int opcion;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar elemento" << endl;
cout << "3. Ordenar lista" << endl;
cout << "4. Mostrar lista" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevo); if(nuevo!=NULL){agregar_final(milista,nuevo);}; break;
case 3: ordenar_lista(milista); break;
case 4: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 5: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=5);
}

void inicia(pnodo &lista)
{
lista=NULL;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_final(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL){
lista=nuevo;
}
else{
for(i=lista;i->sig!=NULL;i=i->sig);
i->sig=nuevo;
}
}

void ordenar_lista(pnodo &lista)
{
pnodo i, j, min;
int aux;
for(i=lista;i->sig!=NULL;i=i->sig){
min=i;
for(j=lista;j->sig!=NULL;j=j->sig){
j=i->sig;
if(j->dato<i->dato){
min->dato=j->dato;
min->sig=j->sig;
}
}
aux=i->dato;
i->dato=min->dato;
min->dato=aux;
}
}

void mostrar(pnodo lista)
{
pnodo i;
if(lista!=NULL){
for(i=lista;i!=NULL;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}





No se que pasa no me ordena como yo quiero, esto es lo que pude lograr hasta ahora
Código (cpp) [Seleccionar]
void ordenar_lista(pnodo &lista)
{
pnodo i, j, min;
int aux;
for(i=lista;i->sig!=NULL;i=i->sig){
min=i;
for(j=i->sig;j->sig!=NULL;j=j->sig){
if(min->dato>j->dato){
min=j;
}
}
if(min!=i){
aux=i->dato;
   i->dato=j->dato;
   j->dato=aux;
}
}
}




Mod: Prohibido el doble o triple post. Usa el botón "Modificar".
#267
Programación C/C++ / Ayuda con listas sinples
31 Agosto 2018, 20:25 PM
Hola amig@s queria que me ayudaran a entender como sucede la magia en este fragmento que acabo de hacer entiendo lista de forma generica pero hay cosas que no me cierran como la sintaxis de C++ en listas y otras cosillas, desde  ya muchas gracias  ;-)

Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef struct tnodo *pnodo;
typedef struct tnodo{
int dato;
pnodo sig;
};

void inicia(pnodo &lista);
void crear(pnodo &nuevo);
void agregar_inicio(pnodo &lista, pnodo nuevo);
void agregar_final(pnodo &lista, pnodo nuevo);
void agregar_orden(pnodo &lista, pnodo nuevo);
pnodo quitar_inicio(pnodo &lista);
pnodo quitar_final(pnodo &lista);
pnodo quitar_nodo(pnodo &lista, int valor);
bool buscar_nodo(pnodo lista,int valor);
void mostrar(pnodo lista);

int main()
{
pnodo milista, nuevonodo, eliminado;
int opcion, num;
inicia(milista);
do{
system("cls");
cout << "1. Iniciar lista" << endl;
cout << "2. Agregar al inicio" << endl;
cout << "3. Agregar al final" << endl;
cout << "4. Agregar en orden" << endl;
cout << "5. Quitar al inicio" << endl;
cout << "6. Quitar al final" << endl;
cout << "7. Quitar valor" << endl;
cout << "8. Buscar valor" << endl;
cout << "9. Mostrar lista" << endl;
cout << "10. Salir" << endl;
cin >> opcion;
switch(opcion){
case 1: inicia(milista); break;
case 2: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 3: crear(nuevonodo); if(nuevonodo!=NULL){agregar_inicio(milista,nuevonodo);}; break;
case 4: crear(nuevonodo); if(nuevonodo!=NULL){agregar_orden(milista,nuevonodo);}; break;
case 5: eliminado=quitar_inicio(milista);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 6: eliminado=quitar_final(milista);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl;delete(eliminado);}
else{cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 7: cout << "Igrese valor a eliminar: "; cin >> num; eliminado=quitar_nodo(milista,num);
if(eliminado!=NULL){cout << "Eliminado: " << eliminado->dato << endl; delete(eliminado);}
else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 8: cout << "Ingrese valor buscado: "; cin >> num;
if(buscar_nodo(milista,num)==true){cout << "VALOR ENCONTRADO" << endl;}
else{ cout << "LISTA VACIA O NO EXISTE VALOR" << endl;}; break;
case 9: cout << "*** LISTA ***" << endl; mostrar(milista); break;
case 10: cout << "FIN DEL  PROGRAMA" << endl; break;
default: cout << "Opcion incorrecta" << endl;
}
system("pause");
}while(opcion!=10);
}

void inicia(pnodo &lista)
{
lista=NULL;
}

void crear(pnodo &nuevo)
{
nuevo=new tnodo;
if(nuevo!=NULL){
cout << "Ingrese valor: "; cin >> nuevo->dato;
nuevo->sig=NULL;
}
else{
cout << "MEMORIA INSUFICIENTE" << endl;
}
}

void agregar_inicio(pnodo &lista, pnodo nuevo)
{
nuevo->sig=lista;
lista=nuevo;
}

void agregar_final(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL){
lista=nuevo;
}
else{
for(i=lista;i->sig!=NULL;i=i->sig);
i->sig=nuevo;
}
}

void agregar_orden(pnodo &lista, pnodo nuevo)
{
pnodo i;
if(lista==NULL){
lista=nuevo;
}
else{
if(nuevo->dato<lista->dato){
nuevo->sig=lista;
lista=nuevo;
}
else{
for(i=lista;i->sig!=NULL && nuevo->dato>(i->sig)->dato;i=i->sig);
nuevo->sig=i->sig;
i->sig=nuevo;
}
}
}

pnodo quitar_inicio(pnodo &lista)
{
pnodo borrado;
if(lista==NULL){
borrado=NULL;
}
else{
borrado=lista;
lista=lista->sig;
borrado->sig=NULL;
}
return borrado;
}

pnodo quitar_final(pnodo &lista)
{
pnodo borrado, i;
if(lista==NULL){
borrado=NULL;
}
else{
if(lista->sig==NULL){
borrado=lista;
lista=NULL;
}
else{
for(i=lista;(i->sig)->sig!=NULL;i=i->sig);
borrado=i->sig;
i->sig=NULL;
}
}
return borrado;
}

pnodo quitar_nodo(pnodo &lista, int valor)
{
pnodo borrado, i;
if(lista==NULL){
borrado=NULL;
}
else{
if(lista->dato==valor){
borrado=lista;
lista=borrado->sig;
borrado->sig=NULL;
}
else{
for(i=lista;i->sig!=NULL && valor!=(i->sig)->dato;i=i->sig);
if(i->sig!=NULL){
borrado=i->sig;
i->sig=borrado->sig;
borrado->sig=NULL;
}
else{
borrado=NULL;
}
}
}
return borrado;
}

bool buscar_nodo(pnodo lista,int valor)
{
pnodo i;
bool encontrado=false;
if(lista!=NULL){
for(i=lista;i!=NULL && encontrado==false;i=i->sig){
if(i->dato==valor){
encontrado=true;
}
}
}
return encontrado;
}

void mostrar(pnodo lista)
{
pnodo i;
if(lista!=NULL){
for(i=lista;i!=NULL;i=i->sig){
cout << "Nodo: " << i->dato << endl;
}
cout << endl;
}
else{
cout << "LISTA VACIA" << endl;
}
}

#268
Hola estoy armando una app donde la funcion basica es averiguar los antecedentes penales de una persona por medio del numero de documento de identidad, queria saber como consigo esa base de datos si alguien me puede ayudar gracias, es tarea para el cole y nadie me dice como hacerlo nisiquiera mis profesores  ;-)
#269
Bueno este programa tiene varios tipos de problemas, ya que no puedo mostrar por paantalla la extraccion de subcadena o asignar en otra variable y mostrarla en pantalla seguidamente lo mas cercano uqe logre fue que despues de ingresar algo por teclado me muestre la subcadena exraida.
Use cin >> ws; pero, la verdad no tengo idea porque pasa esto.

Código (cpp) [Seleccionar]
#include <iostream> //Sorry
#include <stdlib.h> //por
#include <string.h>// las
#include <stdio.h> //librerias

using namespace std;

char* subcadena(char* cadena, int inicial, int final);

int main(){
char materia[]="PROGRAMACION ESTRUCTURADA";
cin >> ws;
cout << subcadena(materia,0,11) << endl;
system("pause");
}

char* subcadena(char *cadena, int inicial, int final)
{
char *substring;
int indice=0;
if(inicial<0 || final>strlen(cadena)){
return NULL;
}
else{
for(int i=inicial;i<=final;i++){
substring[indice]=cadena[i];
indice++;
}
return substring;
}
}


Alguna respuesta puntual? Muchas gracias  ;-)
#270
Tengo problemas al  definir la cantidad de espacios del arreglo de caracteres en 1 e inicializarla con un espacio entre comillas simple me sale que no se puede y al colocarle dos espacios al arreglo e inicializarlo con dos espacios y  doble comillas que son para cadanes si me deja  :o

Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>

using namespace std;

int main(){
char nombre[40], apellido[40], completo[80]="Programadora: ", espacio[2]=" ";
cout << "Ingrese nombre: ";
gets(nombre);
cout << "Ingrese apellido: ";
gets(apellido);
strcat(completo,nombre);
strcat(completo,espacio);
strcat(completo,apellido);
cout << completo << endl;
system ("pause");
}


Datos de entrada:Maria Lux;
Datos de entrada:Grow;
Datos de salida:Programadora: Maria Lux Grow;

Gracias de antemano tios! ;-)