|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Programación C/C++ / Convertir de lista de adyacencia a matriz de adyacencia
|
en: 21 Noviembre 2014, 16:21 pm
|
Buen día hago un programa sobre grafos y me quede atorado aquí, necesito mostrar la matriz de adyacencia a partir de la lista, se que va con un for anidado pero no tengo idea de como tener acceso a las aristas y a los nodos aqui el código: #include <iostream> #include <stdio.h> #include <conio.h>
struct vertice { char insertar; struct vertice *sig; struct arista *aris; };
struct arista { struct vertice *destino; struct arista *sig; };
typedef struct vertice *Nodo; typedef struct arista *Ar;
void crear_nodo(Nodo &grafo) { Nodo Noden=new struct vertice;
cin>>Noden->insertar; Noden->sig=NULL; Noden->aris=NULL;
if(grafo==NULL) { grafo = Noden; return; } else { Nodo aux=grafo;
if(Noden->insertar==aux->insertar) cout<<"\nNODO EXISTENTE :(";
while(aux->sig!=NULL) { if(Noden->insertar==aux->insertar) cout<<"\nNODO EXISTENTE :("; aux = aux->sig; } aux->sig = Noden;
return; }
}
void add_arista(Nodo &aux, Nodo &aux2, Ar &nuevo) { Ar i;
if(aux->aris==NULL) { aux->aris=nuevo; nuevo->destino=aux2; cout<<"\nARISTA CREADA :)."; } else { i=aux->aris; if(i->destino->insertar==aux2->insertar) { cout<<"\n\nARISTA YA EXISTENTE :("; return; } while(i->sig!=NULL) { if(i->destino->insertar==aux2->insertar) { cout<<"\n\nARISTA YA EXISTENTE"; return; } i=i->sig; } nuevo->destino=aux2; i->sig=nuevo; cout<<"\nARISTA CREADA"; }
}
void insert_arista(Nodo grafo) { char ini, fin; Ar Noden=new struct arista; Nodo aux, aux2;
cout<<"\t\t\tEnlace creado con exito!\n";
if(grafo==NULL) { cout<<"SIN ELEMENTOS QUE EVALUAR"; return; } Noden->sig=NULL; cout<<"INGRESE PUNTO INICIO: "; cin>>ini; cout<<"INGRESE PUNTO FINAL: "; cin>>fin; aux=grafo; aux2=grafo; while(aux2!=NULL) { if(aux2->insertar==fin) { break; }
aux2=aux2->sig; } if(aux2==NULL) { cout<<"\nEL NODO "<<fin<<" NO EXISTE\n"; return; }
while(aux!=NULL) { if(aux->insertar==ini) { add_arista(aux, aux2, Noden); return; }
aux = aux->sig; } cout<<"\n RUTA CREADA SIN EXITO\n"<<endl; cout<<"\nEL NODO "<<ini<<" NO EXISTE\n"; return; }
void imprimirgrafo(Nodo grafo) { if(grafo==NULL) { cout<<"LO SENTIMOS, NO SE CREO NINGUN GRAFO"; return; }
Nodo aux; Ar ar; aux=grafo; cout<<"\t\t\tMOSTRANDO matriz DE ADYACENCIA \n\n";
while(aux!=NULL) { cout<<" "<<aux->insertar<<" : "; if(aux->aris!=NULL) { ar=aux->aris; while(ar!=NULL) { cout<<ar->destino->insertar; if(ar->sig!=NULL) cout<<",**** "; ar=ar->sig; }
} aux=aux->sig; cout<<endl; } }
void deleted(char var, Nodo grafo) { Nodo aux; Ar ar, ant, fijo; aux=grafo;
while(aux!=NULL) { if(aux->aris!=NULL) { fijo=aux->aris; ar=aux->aris; ant=aux->aris; while(ar!=NULL) { if(ar->destino->insertar==var) { if(fijo==ar) { aux->aris=fijo->sig; delete(fijo); break; } else { ant->sig=ar->sig; delete(ar); break; } } ant=ar; ar=ar->sig; }
} aux=aux->sig; cout<<endl; } }
void aristas_null(Nodo &aux) { Ar i,j;
i=aux->aris; while(i->sig!=NULL) { j=i; i=i->sig; delete(j); } }
void deleted_nod(Nodo &grafo) { char var; Nodo aux, ant; aux=grafo; ant=grafo;
cout<<"\t\t\t DESHACER NODO\n\n";
if(grafo==NULL) { cout<<"\nLO SENTIMOS, NO SE HA CREADO NINGUN GRAFO\n"; return; } cout<<"QUE NODO DESEA ELIMINAR : "; cin>>var;
deleted(var, grafo);
while(aux!=NULL) { if(aux->insertar==var) { if(aux->aris!=NULL) aristas_null(aux);
if(aux==grafo) { grafo=grafo->sig; delete(aux); cout<<"NODO ELIMINADO CON EXITO"; return; } else { ant->sig=aux->sig; delete(aux); cout<<"NODO ELIMINADO CON EXITO"; return; } }
ant=aux; aux=aux->sig; }
cout<<"\n\nEL NODO NUNCA EXISTIO \n"; return;
}
void arista_quitar(Nodo &grafo) { char ini, fin; Nodo aux, aux2; Ar i, j;
cout<<"\t\t\t DESTRUIR ENLACE \n\n";
if(grafo==NULL) { cout<<"\nGRAFO VACIO :(\n"; return; }
cout<<"NODO DE INICIO: "; cin>>ini; cout<<"NODO A FIN: "; cin>>fin;
aux=grafo; aux2=grafo; while(aux2!=NULL) { if(aux2->insertar==fin) { break; } else aux2=aux2->sig; }
while(aux!=NULL) { if(aux->insertar==ini) { i=aux->aris; if(i==NULL) cout<<"\n\nNO EXISTIO NUNCA ENLACE \n\n";
while(i!=NULL) { if(i->destino==aux2) { if(i==aux->aris) aux->aris=aux->aris->sig; else j->sig=i->sig; delete(i); cout<<"\n\nARISTA ELIMINADA CON EXITO\n\n"; return; } j=i; i=i->sig; } } aux = aux->sig; } }
void mostrAr(Nodo grafo) { Nodo aux; Ar ar; char var;
cout<<"\t\tIMPRIMIR ARISTAS DE NODO \n"; cout<<"\n\nNODO A BUSCAR: "; cin>>var; aux=grafo; while(aux!=NULL) { if(aux->insertar==var) { if(aux->aris==NULL) { cout<<"NO EXISTEN ARISTAS"; return; } else { cout<<aux->insertar<<" :"; ar=aux->aris;
while(ar!=NULL) { cout<<ar->destino->insertar; if(ar->sig!=NULL) cout<<", "; ar=ar->sig; } cout<<endl; return; } } else aux=aux->sig; }
cout<<"\n\nEL NODO NUNCA EXISTIO\n\n"; }
main() { int opc, lim, i; Nodo grafo=NULL;
do{ clrscr(); cout<<"\t\t\t\t GRAFO NO DIRIGIDO\n\n"; cout<<"1) INGRESAR NODO\n" "2) INGRESAR ARISTA\n" "3) ELIMINAR NODO\n" "4) ELIMINAR ARISTA\n" "5) BUSCAR NODO\n" "6) LISTA DE ADYACENCIA\n" "7) SALIR\n" "\n\nTU OPCION ES: "; cin>>opc;
switch(opc) { case 1: clrscr(); cout<<"\t\t\tHAZ ELEGIDO INGRESAR NODOS\n\n"; cout<<"NUMERO DE NODOS A INGRESAR: "; cin>>lim;
for(i=0; i<lim; i++) { cout<<(i+1)<<") "; crear_nodo(grafo); }
break; case 2: clrscr(); insert_arista(grafo); break; case 3: clrscr(); deleted_nod(grafo); break; case 4: clrscr(); arista_quitar(grafo); break; case 5: clrscr(); mostrAr(grafo); getch(); break; case 6: clrscr(); imprimirgrafo(grafo); getch(); break; case 7: return 0;
default: clrscr(); cout<<"OPCION NO VALIDA :("; getch(); } }while (opc!=7); getch(); }
|
|
|
2
|
Programación / Programación C/C++ / Acceder a miembros de objetos
|
en: 9 Octubre 2013, 17:44 pm
|
Hola pues resulta que estoy varado con este programa, el cual al ingresarle calificaciones de 2 materias para n alumnos debe arrojar el promedio grupal mi pregunta es como puedo acceder al promedio parcial que esta encapsulado en el objeto?? o hay otra forma de poder sacar el promedio general para los n alumnos?? #include <iostream.h> #include <conio.h> #include <stdio.h> #include <iomanip.h>
class Calificaciones {
public:
Calificaciones();
void acceder(); void ingresar(); void ingresar2(); void calcular(); void calcular2(); void mostrar(); //void mostrarDatos(); void validar();
private:
float c1; float c2; float c3; float c4; float c5; float c6; int nc; float prom; float prom2; float promParcial;
};
Calificaciones::Calificaciones() {
c1=c2=c3=c4=c5=c6=prom=prom2=promParcial=0.0; nc=0;
}
void Calificaciones::acceder() { cout<<"\n\n\tIngrese numero de cuenta: "; cin>>nc;
while( nc>999999 || nc<99999 ) { cout<<"\n\t\aNumero de cuenta incorrecto, verifiquelo e ingrese de nuevo: "; cin>>nc; }
} void Calificaciones::ingresar() { cout<<"\nMATERIA 1:"<<endl; cout<<"\n\tIngrese calificacion de primer parcial: "; cin>>c1; cout<<"\n\tIngrese calificacion de segundo parcial: "; cin>>c2; cout<<"\n\tIngrese calificacion de tercer parcial: "; cin>>c3;
} void Calificaciones::ingresar2() { cout<<"\nMATERIA 2:"<<endl; cout<<"\n\tIngrese calificacion de primer parcial: "; cin>>c4; cout<<"\n\tIngrese calificacion de segundo parcial: "; cin>>c5; cout<<"\n\tIngrese calificacion de tercer parcial: "; cin>>c6; clrscr();
}
void Calificaciones::validar() { c1 = (c1>=0&&c1<=10) ? c1 : 0; c2 = (c2>=0&&c2<=10) ? c2 : 0; c3 = (c3>=0&&c3<=10) ? c3 : 0; c4 = (c4>=0&&c4<=10) ? c4 : 0; c5 = (c5>=0&&c5<=10) ? c5 : 0; c6 = (c6>=0&&c6<=10) ? c6 : 0; }
void Calificaciones::calcular() {
cout<<"\n\n\n\n\n\n\n\n\n\n\tEl promedio del alumno: "<<nc<<" se esta calculando..."; validar(); prom=(c1+c2+c3)/3;
} void Calificaciones::calcular2() {
//cout<<"\n\n\n\n\n\n\n\n\n\n\tEl promedio del alumno: "<<nc<<" se esta calculando..."; //validar(); prom2=(c4+c5+c6)/3; promParcial=(prom+prom2)/2; //return promParcial;
}
void Calificaciones::mostrar() { //cout<<nc//cuenta que no se repita?? cout<<endl<<" "<<nc<<" "; cout<<setprecision(2) <<setiosflags( ios::fixed || ios::showpoint ) <<" "<<c1 <<" "<<c2 <<" "<<c3
<<" "<<prom <<( prom < 7 ? " NA" : " A") <<" "<<c4 <<" "<<c5 <<" "<<c6 <<" "<<prom2 <<( prom2 < 7 ? " NA" : " A") <<" "<<promParcial;
}
main () {
Calificaciones c[' '];
int ans,n,i,j,k; //porque no reconoce i,j,k?? char regreso='M'; char ciclo='s';
cout<<"\n\n\n\t\t\tCuantos alumnos va a ingresar?\t "; cin>>n;
while (ciclo=='s') {
cout<<"\n\n\n\t\t\tQue desea hacer?\n" <<"\n\t\t1.-Ingresar\n" <<"\n\t\t2.-Calcular\n" <<"\n\t\t3.-Mostrar\n" <<"\n\t\t4.-Salir\t\t"; cin>>ans; clrscr();
switch (ans) {
case 1:
for ( i=1; i<=n; i++) { regreso='J'; cout<<"\n\t\tInstrucciones: Ingrese valores enteros o decimales\n " <<" \t\t\t\tcon el rango del 0 al 10\n" <<"\t\tPara el numero de cuenta deberan ser de 6 digitos...\0";
c[i].acceder(); c[i].ingresar();
c[i].ingresar2(); }
break;
case 2:
clrscr(); for ( j=1; j<=n; j++) {
if(regreso=='M') { cout<<"\n\aPrimero ingrese calificaciones para despues calcular!"; } else { clrscr(); cout<<endl; c[j].calcular(); //clrscr(); c[j].calcular2(); //promGral[j]=?????
}
getchar();
} clrscr();
break;
case 3:
clrscr(); cout<<endl<<"ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛMATERIA1ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ" <<"MATERIA2ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"<<endl<<endl; //cout<<"\t\tMATERIA1\t\t\t\tMATERIA2 "<<endl; cout<<"ÛNo_CtaÛ" <<" ÛC1Û" <<" ÛC2Û" <<" ÛC3Û" <<" ÛPromÛ" <<" ÛC1Û" <<" ÛC2Û" <<" ÛC3Û" <<" ÛPromÛ" <<" ÛPGralÛ";
for ( k=1; k<=n; k++) {
if(regreso=='M') { cout<<"\n\a\nNO hay datos para mostrar!!!"; } else { //mat1[k].mostrarDatos(); //cout<<" "; c[k].mostrar(); /*cout<<" "; mat2[k].mostrar();*/ }
getchar();
} clrscr();
break;
case 4:
clrscr(); cout<<"\n\n\t\tSaliendo...\a\a\a"; ciclo='a';
break;
default:
cout<<"\n\n\n\n\t\t\aOpcion invalida vuelva a intentarlo...";
break;
}
}
getchar();
|
|
|
3
|
Programación / Programación C/C++ / N alumnos con clases
|
en: 10 Septiembre 2013, 03:36 am
|
Hola estoy haciendo un programa que al ingresar tres calificaciones te da el promedio con clases y todo tipo de validaciones lógicas y corre bien pero solo para un alumno ahora quiero que sea para n alumnos pero no se bien como, estaba pensando en que fuera un arreglo bidimensional pero no supe como poner los for anidados en las clases aquí esta el código: #include <iostream.h> #include <conio.h> #include <stdlib.h>
class calificaciones { public: calificaciones();
void ingresar(); float calcular(); void mostrar();
private: float c1; float c2; float c3; int nc; float prom; };
calificaciones::calificaciones() { c1=c2=c3=prom=0.0; nc=0; }
void calificaciones::ingresar() {
clrscr(); cout<<"\n\t\tInstrucciones: Ingrese valores enteros o decimales "<<endl; cout<<" \t\tcon el rango del 0 al 10"<<endl; cout<<"\t\tPara el numero de cuenta deberan ser de 7 digitos..."; cout<<"\n\n\tIngrese numero de cuenta: "; cin>>nc; while(nc>9999999||nc<999999) { cout<<"\n\t\aNumero de cuenta incorrecto, verifiquelo e ingrese de nuevo: "; cin>>nc; }
cout<<"\n\tIngrese calificacion de primer parcial: "; cin>>c1; while(c1>10||c1<0) { cout<<"\n\t\aValor invalido! Ingrese calificacion de primer parcial: "; cin>>c1; }
cout<<"\n\tIngrese calificacion de segundo parcial: "; cin>>c2; while(c2>10||c2<0) { cout<<"\n\t\aValor invalido! Ingrese calificacion de segundo parcial: "; cin>>c2; } cout<<"\n\tIngrese calificacion de tercer parcial: "; cin>>c3; while(c3>10||c3<0) { cout<<"\n\t\aValor invalido! Ingrese calificacion de tercer parcial: "; cin>>c3; }
}
float calificaciones::calcular() {
clrscr(); prom=(c1+c2+c3)/3; return prom;
}
void calificaciones::mostrar() { clrscr(); cout<<"\n ºNo de Cuentaº"//<<nc; <<"\t º1er Parcialº"//<<c1; <<"\t º2do Parcialº"//<<c2; <<"\t º3er Parcialº"//<<c3; <<"\t º Promedio º";//<<prom; gotoxy(69,5); //nc=233552; //c1=7.1; //c2=7.1; //c3=7.1;
if(prom<7) cout<<" Reprobado"; else { gotoxy(71,5); cout<<"Aprobado"; } gotoxy(7,4); cout<<nc; gotoxy(24,4); cout<<c1; gotoxy(40,4); cout<<c2; gotoxy(56,4); cout<<c3; gotoxy(73,4); cout<<prom;
}
main () { calificaciones m; int ans; int ciclo; flag:
clrscr(); cout<<"\n\t\tQue desea hacer?\n" <<"\n\t\t1.-Ingresar\n" <<"\n\t\t2.-Calcular\n" <<"\n\t\t3.-Mostrar\n" <<"\n\t\t4.-Salir\t"; cin>>ans;
switch (ans) { case 1: m.ingresar(); cout<<endl<<"Guardado para regresar al menu presione 7...\t"; cin>>ciclo; while(ciclo!=7) { cout<<"\n\t\aTecla incorrecta! presiona 7: "; cin>>ciclo; } break; case 2: m.calcular(); cout<<endl<<"\n\n\n\n\n\n\n\n\n\t\tCalculando para regresar al menu presione 7...\t"; cin>>ciclo; while(ciclo!=7) { cout<<"\n\t\aTecla incorrecta! presiona 7: "; cin>>ciclo; } break; case 3: m.mostrar(); cout<<endl<<"\n\n\n\t\tHa terminado de leer? presione 7\t"; cin>>ciclo; while(ciclo!=7) { cout<<"\n\t\aTecla incorrecta! presiona 7: "; cin>>ciclo; } break; case 4: clrscr(); cout<<"\n\n\t\tSaliendo...\a\a\a"; getch(); exit(1); break;
default: for (int i=0;i<1;i++) { cout<<"\n\n\t\tOpcion invalida vuelva a intentarlo..."; getch(); } goto flag;
}
while (ciclo==7) goto flag; getch();
return 0; } Espero me puedan ayudar saludos!!
|
|
|
4
|
Programación / Programación C/C++ / Cambiar la impresion de un arreglo.
|
en: 31 Marzo 2013, 23:03 pm
|
Hola Me pidieron un programa que imprimiera el triángulo de Sierpinski a partir del triangulo de pascal que ya tengo programado, ahora tengo que convertir los que son pares en "0" y los impares en "1", y ahí es donde me quede estancado ¿Como puedo hacer para que a partir de lo que imprima en el triangulo de pascal pueda poner los unos y los ceros? Acá el código: #include <stdio.h> #include <iostream.h> #include <conio.h>
int pasc[' ']={0}; int x=0,n; void llenar() {
cout<<"\tIngrese hasta que linea: "; cin>>n; } void pascalizar() {
for (int i=0; i<n ; i++) { for (int j=x; j>=0; j--) { if(j==x || j==0) { pasc[j] = 1; } else { pasc[j] = pasc[j] + pasc[j-1]; } } x++; cout<<"\n"; for(int j=0; j<x; j++) { cout<<"\t"<<pasc[j]; } } } void main (void) {
llenar(); clrscr(); pascalizar(); getch(); } Gracias de antemano
|
|
|
5
|
Programación / Programación C/C++ / Calcular mas de una moda
|
en: 19 Marzo 2013, 01:38 am
|
Como todos sabemos la moda es un termino que se utiliza en Estadística para saber cual es el numero que mas se repite. Mi programa ordena números aleatorios y arroja la media la mediana y la moda y al estarlo corriendo me di cuenta que si hay mas de un número que se repite mas, entonces imprime el ultimo que se repitió en vez de los 2 o 3 que se repitieron aquí esta el código: #include <stdio.h> #include <iostream.h> #include <conio.h> #include <stdlib.h> void main (void) { clrscr(); int arreglo[10],x,cont,mod; float Prom; randomize(); cout<<"***Metodo Burbuja, Media,mediana,moda***\a"<<endl; for (int i=0;i<10;i++) { arreglo[i]=random(10)+1; cout<<arreglo[i]<<" "; } getch(); for(int j=0;j<10;j++) { for(int k=0;k<10;k++) { if(arreglo[j]>arreglo[k]) { x=arreglo[k]; arreglo[k]=arreglo[j]; arreglo[j]=x; } } } cout<<"\n"; for(int l=9;l>=0;l--) { cont=0; cout<<arreglo[l]<<" "; for(int a=9;a>=0;a--) { if(arreglo[l]==arreglo[a]) { cont++; } if(cont>=2) { mod=arreglo[l]; } } } for(int b=9;b>=0;b--) { Prom=Prom+arreglo[b]; } Prom=Prom/10; cout<<"\n\20 Media: "<<Prom; cout<<"\n\20 Mediana: "<<arreglo[5]<<" "<<arreglo[4]; cout<<"\n\20 Moda: "<<mod; getch(); }
|
|
|
6
|
Programación / Programación C/C++ / Frecuencia en una serie numeria aleatoria
|
en: 6 Marzo 2013, 03:17 am
|
Hola pues me trabe con algo en este programa que consiste en imprimir 30 numeros aleatorios del 1 al 10 y dar la frecuencia de cada numero donde me trabe fue en lo ultimo ya que no supe donde ubicar el switch-case El código es este: #include <stdio.h> #include <iostream.h> #include <conio.h> #include <stdlib.h> void main (void) { int arry[29],f[9]; randomize(); for (int i=0;i<=29;i++) { arry[i]=random(9)+1; switch(arry[i]) { case 1: f[0]+1; break; case 2: f[1]+1; break; case 3: f[2]+1; break; case 4: f[3]+1; break; case 5: f[4]+1; break; case 6: f[5]+1; break; case 7: f[6]+1; break; case 8: f[7]+1; break; case 9: f[8]+1; break; case 10: f[9]+1; break; } } for (int j=0;j<=29;j++) { cout<<arry[j]<<" "; } for(int k=0;k<=9;k++) { cout<<"\n Frecuencia: "<<f[k]; } getch(); }
|
|
|
7
|
Programación / Programación C/C++ / Ayuda con arreglos.
|
en: 5 Marzo 2013, 21:47 pm
|
Es un programa que imprime los numeros del 1 al 100, el resultado de la suma de los pares y el resultado de la suma de los impares.(debe de utilizar dos arreglos uno que arroje la serie y otro el resultado de las sumas) La serie si la imprime bien pero al momento de que mando a imprimir las sumas me arroja valores basura, el código es este: #include <stdio.h> #include <iostream.h> #include <conio.h> #include <windows.h> #include <stdlib.h> void main (void) { clrscr(); int arryc[99],arryS[99],spar=0,simp=0; //sleep()=[500]; cout<<"Serie: "<<endl; cout<<"\n"; for(int i=0;i<=99;i++) { arryc[i]=i+1; cout<<arryc[i]<<"\t"; } arryS[99]=0; for (int i=0; i<=99;i++) { if ( arryS[i] % 2 == 0) { //arryS[i]=0; spar=spar+arryS[i]; //spar+=arryS[i]; } else { //arryS[i]=0; simp=simp+arryS[i]; //simp+=arryS[i]; } } cout<<"\nSuma pares: "; cout<<spar<<endl; cout<<"\nSuma impares: "; cout<<simp<<endl; getch(); }
|
|
|
|
|
|
|