24/04/2008, 12:04
|
| | | Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 8 meses Puntos: 0 | |
Re: Problema con Codigo C++ en linux. /*
BUENO, ACA ESTA EL CODIGO, LO HABIA SUBIDO EN UN .RAR PARA NO DESORDENAR EL POST, PERO TAL VEZ ASI PUEDAN VER LA FALLA. PROBABLEMENTE PARA USTEDES SALTE A LA VISTA, PERO A MI NI POR DONDE LO BUSQUE LO ENCUENTRO. GRACIAS:
*/
////////////////////////////////////////////////
#include <iostream>
using namespace std;
typedef struct nodoA *PunteroA;
typedef struct nodoB *PunteroB;
int OP=0;
struct nodoA{
PunteroA next;
PunteroB que_me_apunta;
int page_number;
};
struct nodoB{
PunteroB down;
int page;
};
//La clase ListaGeneralizada y sus metodos, cada pagina sera representada por un nodo A
//y estan enlazados entre si. Cada nodo A ademas esta "comunicado" con todas las paginas
//que le apuntan que se representan con nodos B.
class ListaGeneralizada{
public:
PunteroA Primero;
PunteroA Buscador;
PunteroB Contador;
public:
ListaGeneralizada(){
Primero=NULL;
Buscador=NULL;
Contador=NULL;
}
void Insertar_nodoA(int nr_pagina){
PunteroA aux;
aux= new (nodoA);
if(Primero==NULL){
Primero=aux;
Buscador=aux;
aux->page_number=nr_pagina;
aux->next=NULL;
aux->que_me_apunta=NULL;
}
else{
Buscador->next=aux;
Buscador=aux;
aux->page_number=nr_pagina;
aux->next=NULL;
aux->que_me_apunta=NULL;
}
}
void Insertar_nodoB(int nr_pagina){
PunteroB aux;
aux=new (nodoB);
if(Buscador->que_me_apunta==NULL){
Buscador->que_me_apunta=aux;
aux->down=NULL;
aux->page=nr_pagina;
}
else{
Contador=Buscador->que_me_apunta;
while(Contador->down!=NULL){
Contador=Contador->down;
}
Contador->down=aux;
aux->page=nr_pagina;
aux->down=NULL;
}
}
int Buscar_derecha(int nr_pagina){
PunteroA aux;
aux=Primero;
if(aux==NULL){
return 0;
}
while(aux->page_number!=nr_pagina&&aux->next!=NULL){
aux=aux->next;
}
if(aux->page_number==nr_pagina){
Buscador=aux;
return 1;
}
else{
Buscador=aux;
return 0;
}
}
int Contar_abajo(int pagina){
ListaGeneralizada::Buscar_derecha(pagina);
if(Buscador->que_me_apunta==NULL){return 0;}
else{
PunteroB aux;
int contar=0;
aux=Buscador->que_me_apunta;
while(aux->down!=NULL){
contar=contar+1;
aux=aux->down;
}
return contar;
}
}
void set_buscador(){
Buscador=Primero;
}
};
int main(int argc, char *argv[]){
int ID;
int pag;
float** tabla;
float** temp_tabla;
float d=0.85;
int index=0;
int i,k;
int j=0;
float PR=0;
float delta=1;
int C=0;
int n;
char c;
int IDid=0;
int paginas=0;
char salida[30] = "Salida(PageRank).txt";
float calc;
//Vamos a construir la lista generalizada mientras leemos el archivo. Ademas
//almacenaremos informacion util en un arreglo dinamico de dos dimensiones
//llamado tabla.
ListaGeneralizada lista;
while(scanf("%i",&n)==1){
if(IDid==0){
pag=n;
if(j==0){
tabla=new float*[3];
for(i=0;i<3+1;i++){
tabla[i]=new float[pag];
}
j=pag;
}
if(pag>=j){
j=pag*2;
temp_tabla=new float*[3];
for(i=0;i<3+1;i++){
temp_tabla[i]=new float[j];
}
for(i=0;i<pag+1;i++){
for(k=0;k<4;k++){
temp_tabla[k][i]=tabla[k][i];
}
}
delete[] tabla;
tabla=new float*[j];
for(i=0;i<j+1;i++){
tabla[i]=new float[3];
}
tabla=temp_tabla;
}
tabla[0][pag]=pag;
index=index+1;
}
if(IDid==1){
ID=n;
if(lista.Buscar_derecha(ID)==0){
lista.Insertar_nodoA(ID);
lista.Insertar_nodoB(pag);
}
else{
lista.Buscar_derecha(ID);
lista.Insertar_nodoB(pag);
}
C=C+1;
}
if(scanf("%[ ]",&c)==1){
IDid=1;
}
if(scanf("%[\n]",&c)==1){
tabla[3][pag]=C;
C=0;
IDid=0;
}
}
if(lista.Buscador!=NULL){
while(lista.Buscador->next!=NULL){
lista.Buscador=lista.Buscador->next;
}
}
for(i=1;i<index+1;i++){
if(lista.Buscar_derecha(i)==0){
lista.Insertar_nodoA(i);
}
}
CONTINUA ABAJO.... |