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ú

Mensajes - FranAI

#1
Hola a todos! Estoy teniendo un problema con un proyecto que he creado para obtener un árbol recubridor (ni mínimo ni máximo) a partir de un grafo precargado, el resultado final debería mostrarme las aristas del arbol recubrido con sus respectivos pesos, el problema es que al compilar por tercera o cuarta vez no me muestra la información completa. Tengo entendido que es un problema de violación de acceso ya que el proceso finalizó con un valor de retorno de 3221225477, en hex: 0xc0000005, el código de windows para indicar violación de acceso.
El problema es que no encuentro el inconveniente en el código.

#include <bits/stdc++.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

#define V 5


int minKey(int key[V], bool mstSet[V])
{

int min = INT_MAX;
int min_index = 0;

for (int v = 0; v < V; v++)
{
if (mstSet[v] == false && key[v] <= min)
min = key[v], min_index = v;
}
return min_index;
}

int minKey1(int key[V], bool mstSet[V])
{

int min = 0;
int min_index = 0;

for (int v = 0; v < V; v++)
{
if (mstSet[v] == false && key[v] >= min)
min = key[v], min_index = v;
}

return min_index;
}

void printMST(int parent[], int graph[V][V])
{
cout<<"Aristas\tPesos\n";
for (int i = 1; i < V; i++)
{
cout<<parent[i]<<" - "<<i<<" \t"<<graph[i][parent[i]]<<" \n";
}
}


void primMST(int graph[V][V])
{
srand(time(NULL));
int u;
int aleatorio;

int parent[V];


int key[V];


bool mstSet[V];


for (int i = 0; i < V; i++)
{
key[i] = INT_MAX, mstSet[i] = false;
}

key[0] = 0;
parent[0] = -1;


for (int count = 0; count < V - 1; count++)
{

aleatorio = rand()%(2-1+1)+1;
cout << aleatorio << endl;
switch (aleatorio)
{
case 1:
{
u = minKey(key, mstSet);
break;
}

case 2:
{
u = minKey1(key, mstSet);
break;
}

}

mstSet[u] = true;


for (int v = 0; v < V; v++)
{
if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
parent[v] = u, key[v] = graph[u][v];
}
}


printMST(parent, graph);
}


int main()
{

int graph[V][V] = { { 0, 2, 0, 6, 0 },
     { 2, 0, 3, 8, 5 },
     { 0, 3, 0, 0, 7 },
     { 6, 8, 0, 0, 9 },
     { 0, 5, 7, 9, 0 } };


primMST(graph);

return 0;
}

#2
Ya varias veces me viene pasando lo mismo con otros programas, el condicional if no me compara dos strings,  no entra, pasa de largo. He usado tanto el operador "==" como el metodo .compare, y realmente no se que puede estar mal.
CPP de carga:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
struct registro{
int numCuenta, saldoCuenta;
string apellido, nombre, codCuenta;
};registro r[6];
int main()
{
FILE *p = fopen("registros4.dat", "ab");
if(p == NULL)
{
cout << "Error al abrir el archivo.";
exit(1);
}
else
{
cout << "Seis clientes" << endl;
for(int i = 0; i < 6; i++)
{

cout << "CLIENTE " << i+1 << endl;
cout << "Ingrese numero de cuenta del cliente: ";
cin >> r[i].numCuenta;
cout << "Ingrese codigo de cuenta del cliente: ";
cin >> r[i].codCuenta;
cout << "Ingrese nombre del cliente: ";
cin >> r[i].nombre;
cout << "Ingrese apellido del cliente: ";
cin >> r[i].apellido;
cout << "Ingrese saldo de la cuenta del cliente: ";
cin >> r[i].saldoCuenta;
fwrite(&r[i], sizeof(registro), 1, p);
}
system("pause");
fclose(p);
}
}


CPP del proceso, donde está el problema:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string>
#include <stdio.h>
using namespace std;
struct registro{
int numCuenta, saldoCuenta;
string apellido, nombre, codCuenta;
};registro r[6];
int main()
{
FILE *p = fopen("registros4.dat", "rb");
if(p == NULL)
{
cout << "Error al abrir el archivo.";
exit(1);
}
else
{
int num = 0, importe = 0, a = 0, b = 0;
string A = "A", B = "B", C = "C", D = "D";
for(int i = 0; i < 6; i++)
{
fread(&r[i], sizeof(registro), 1, p);
if(r[i].codCuenta.compare(B) == 0)
{
cout << "Cuenta bloqueada" << endl;
cout << "Numero de cuenta: " << r[i].numCuenta << endl;
cout << "Nombre del cliente: " << r[i].nombre << endl;
cout << "Apellido del cliente: " << r[i].apellido << endl;
cout << "Saldo de cuenta: " << r[i].saldoCuenta << endl << endl;
}
if(r[i].codCuenta.compare(C) == 0)
{
num = i;
cout << "Cuenta en gestion judicial" << endl;
cout << "Numero de cuenta: " << r[i].numCuenta << endl;
cout << "Nombre del cliente: " << r[i].nombre << endl;
cout << "Apellido del cliente: " << r[i].apellido << endl;
cout << "Saldo de cuenta: " << r[i].saldoCuenta << endl << endl;
importe += r[num].saldoCuenta;
}
if(r[i].codCuenta.compare(A) == 0)
{
a++;
}
if(r[i].codCuenta.compare(D) == 0)
{
b++;
}
}

cout << "Cuentas normales: " << b << endl;
cout << "Cuentas cerradas: " << a << endl;
}
system("pause");
fclose(p);
return 0;
}
#4
Tengo un  archivo  con  la  siguiente  información  en  cada registro:  Legajo  del  alumno,  altura  y  peso.  Debo determinar  el  peso máximo  y  el  mínimo. Primero ordené los registros con un algoritmo de ordenamiento y luego reposiciono el puntero al comienzo y al final del registro para obtener el alumno de menor y mayor peso. El problema se dá en el dato de mayor peso, no me devuelve el dato correcto y no veo que puede estar mal.
Este es el cpp de carga:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
struct registro{
int legajo, altura, peso;
};

int main()
{
FILE *p = fopen("registros2.dat", "ab");
if(p == NULL)
{
cout << "Error al abrir el archivo.";
exit(1);
}
else
{
registro alumnos[10];
for(int i = 0; i < 10; i++)
{
cout << "Legajo alumno "<< i+1 <<": ";
cin >> alumnos[i].legajo;
cout << "Altura: ";
cin >> alumnos[i].altura;
cout << "Peso: ";
cin >> alumnos[i].peso;
fwrite(&alumnos[i], sizeof(registro), 1, p);
}
fclose(p);
}
system("pause");
return 0;
}

cpp de proceso:
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
struct registro{
int legajo, altura, peso;
};registro alumnos[10];

void peso_mayor_menor(FILE *p)
{
int aux=0, aux1=0, aux2=0, res=0;
while(feof(p)==0)
{
fread(&alumnos, sizeof(registro), 1, p);
for (int i = 0; i < 9; i++)
    {
        for (int j = i + 1; j < 10; j++)
        {
            if (alumnos[i].peso > alumnos[j].peso)
            {
                aux = alumnos[i].peso;
                alumnos[i].peso = alumnos[j].peso;
                alumnos[j].peso = aux;
               
                aux1 = alumnos[i].legajo;
                alumnos[i].legajo = alumnos[j].legajo;
                alumnos[j].legajo = aux1;
               
                aux2 = alumnos[i].altura;
                alumnos[i].altura = alumnos[j].altura;
                alumnos[j].altura = aux2;
            }
}
}
}
for(int i = 0; i < 10; i++)
{
cout << "Legajo " << ": " << alumnos[i].legajo << endl;
cout << "Peso " << ": " << alumnos[i].peso << endl;
cout << "Altura " << ": " << alumnos[i].altura << endl << endl;
}
long tam = 0 * sizeof(registro);
res = fseek (p,  tam, SEEK_CUR);

if (res == 0)
{
fread (&alumnos, sizeof (registro), 1, p);
cout << "ALUMNO DE MENOR PESO" << endl;
cout << "Legajo: " << alumnos[tam].legajo << endl;
cout << "Peso: " << alumnos[tam].peso << endl << endl;

}
rewind(p);
long tam1 = 0 * sizeof(registro);
int res1 = fseek (p, tam1, SEEK_CUR);
if(res==0)
{
fread (&alumnos, sizeof (registro), 1, p);
cout << "ALUMNO DE MAYOR PESO" << endl;
cout << "Legajo: " << alumnos[tam1].legajo << endl;
cout << "Peso: " << alumnos[tam1].peso << endl << endl;
}
}
//void altura_mayor_menor(FILE *p)
//{

//}
int main()
{
FILE *p = fopen("registros2.dat", "rb");
if(p == NULL)
{
cout << "Error al abrir el archivo.";
exit(1);
}
else
{
peso_mayor_menor(p);
//altura_mayor_menor(p);
}
system("pause");
fclose(p);
return 0;
}
#5
Dudas Generales / SMS de Facebook
16 Junio 2020, 18:46 PM
Recientemente quise reestablecer mi contraseña de Face, elegí la opción para que me envíen un SMS con un código. Me llegó esto por parte de la empresa: https://ibb.co/Hqn4GBr
Posteo esto ya que me llamó demasiado la atención la forma de escribir, este mensaje no viene de Facebook? No he usado el código.
#6
Muchas gracias por la respuesta.
#7
Programación C/C++ / Comparar matrices
17 Mayo 2020, 18:23 PM
Hace poco que  comencé a aprender c++.
Quiero comparar una matriz que ingresa el usuario con una ya almacenada en una variable y determinar si son o no iguales. El problema es que al comparar, hay casos donde me dice que le matriz ingresada es igual a la otra pero claramente no es así! La comparación no está funcionando como debe.
Código (cpp) [Seleccionar]
#include <iostream>
#include <cstring>
using namespace std;
int main(){
   char verificacion1[5];
   char verificacion2[2]="v";
   int num12, num13, num21, num22, num31, num33;
   int matriz1[3][3]=
{
{3, 0, 0},
{0, 0, 3},
{0, 3, 0}
};
int matriz1correcta[3][3] =
{
   {3, 1, 2},
   {1, 2, 3},
   {2, 3, 1},
};
int i, j;
int m;
cout << "Esta es la matriz!" << endl;
for(int i = 0; i < 3; i++) {//Muestro en pantalla la matriz incompleta.
    for(int j = 0; j < 3; j++) {
        printf("%d ", matriz1[i][j]);
    }
   printf("\n");
}
    cout << "Ingresa un numero en la fila 1, columna 2: ";
cin >> num12;
matriz1[0][1] = num12;
cout << "Ingresa un numero en la fila 1, columna 3: ";
cin >> num13;
matriz1[0][2] = num13;
cout << "Ingresa un numero en la fila 2 , columna 1: ";
cin >> num21;
matriz1[1][0] = num21;
cout << "Ingresa un numero en la fila 2, columna 2: ";
cin >> num22;
matriz1[1][1] = num22;
cout << "Ingresa un numero en la fila 3, columna 1: ";
cin >> num31;
matriz1[2][0] = num31;
cout << "Ingresa un numero en la fila 3 , columna 3: ";
cin >> num33;
matriz1[2][2] = num33;
cout << endl << endl;
cout << "Este es la matriz que acabas de armar!" << endl;
for(i = 0; i < 3; i++) {
    for(j = 0; j < 3; j++) {
        printf("%d ", matriz1[i][j]);
    }
   printf("\n");
}

   do{
cout << endl << "Presiona la tecla 'v' para determinar si es correcto o no: ";
cin >> verificacion1;
if (strcmp(verificacion1,verificacion2)==0){
       for(i=0; i<3; i++)
{
           for (j=0; j<3; j++)
{
               if(matriz1[i][j]!= matriz1correcta[i][j])
{
                   m=1;
               }
               else
{
                m=0;
}
           }
       }
if(m==1){
cout << "no son iguales!";
break;
}
if(m==0){
cout << "son iguales!";
}
}
else {
cout << "Por favor, ingrese la letra que se le pide.";

}    
}while(strcmp(verificacion1,verificacion2)!=0);
   
   return 0;
}
#8
Programación C/C++ / Problema al usar while
23 Abril 2020, 03:48 AM
Soy principiante en cuanto a c++ respecta, mi inconveniente es el siguiente: Al pedirle al usuario que ingrese por segunda vez un numero, si el usuario ingresa la letra "n" debe terminarse el ciclo y mostrar por pantalla la cantidad de números introducidos por el usuario, así como, la suma de los resultados calculados. Mi problema es la condicion del while. Como puedo comparar un int con un char? La variable que se almacena en el segundo ingreso es de tipo entero, no deberia cambiarla a char y comparar? Como lo hago? ¿while (num2 != letra1);?

#include <iostream>
#include <stdio.h>
using namespace std;
int num;
int num2;
int i = 0;
int i2 = 0;
int i3 = 0;
int result = 0;
int result2 = 0;
int finalresult = 0;
char letra1 = 'n';
int main()
{
    do
    {
        cout << "Ingrese un numero entero: " << endl;
        cin >> num;
        i = i + 1;
        result = num * num - num;
        cout << num <<  " * " << num << " - " <<num<<  " = " << result << endl;
        cout << "Desea ingresar otro numero? " << endl;
        cin >> num2;
        i2 = i2 + 1;
        result2 = num2 * num2 - num2;
        finalresult =  finalresult + result + result2;
    }while (num2 != letra1);
    i3 = i2 + i;
    cout << i3 << " numeros ha ingresado el usuario." << endl;
    cout << "Suma de resultados calculados: " << finalresult << endl;
    return 0;
}
#9
Muchas gracias!
#10
Estoy aprendiendo lo básico de python, puede que mi pregunta sea muy tonta pero no logro verlo :P . En el siguiente código me tira este error que no logro entender.

a = int(input("Ingrese un numero: "))
if a>=0 and a<=10:
    print("El numero está entre el 0 y el 10")
elif: #Sintaxis inválida
    if a>=11 and a<=20:
        print("EL numero esta entre el 11 y el 20")
else:
    if a>=21 and a<=30:
        print("El numero esta entre el 21 y el 30")


Al escribirlo de esta manera no lanza error:
a = int(input("Ingrese un numero: "))
if a>=0 and a<=10:
    print("El numero está entre el 0 y el 10")
elif a>=11 and a<=20:
        print("EL numero esta entre el 11 y el 20")
else:
    if a>=21 and a<=30:
        print("El numero esta entre el 21 y el 30")


No logro entender por qué al escribir ":" luego de elif lanza error, siendo que debajo de este, "else" si tiene los dos puntos y funciona.