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 - LadyWin

#1
Hardware / Pantalla negra al cambiar memoria RAM
14 Octubre 2021, 19:39 PM
Hola gente, tengo una Toshiba Satellite L845-SP4304LA y pensé en aumentar el tamaño de la ram, investigue cual podría ser la correcta para mi notebook y termine comprando una con estas características:  DDR3 DRAM, formato SODIMM, velocidad 1066MHz, linea apple sodimm, capacidad total 4GB. Incluso lei comentarios donde daban buenas referencias y había funcionado en otros dispositivos. El problema es que a mi no me funciona, si lo agrego en el segundo slots que tengo disponible el sistema no lo reconoce y si la agrego en el primer slots la pantalla queda negra, a que se debe? Esas características coincide con la RAM que vino originalmente en la notebook

Cuando quite la ram en la placa base decia MODEL:BY3C, no se si sirve el dato, si me pueden ayudar estaría agradecida!
#2
Buenos días gente, como están? Tengo dos dudas en este tema:

1) Como podría ser la mejor manera de saber cuales serian las funcionalidades publicas correctas para que pueda utilizar el usuario? por ejemplo, tengo un TAD de listas, en ella estarían las operaciones comunes como agregar al final, mostrar, eliminar, etc y tengo una funcionalidad que se llamaría crear donde crearía un nodo que la utilizaría dentro de la funcionalidad agregar al final, esta operación de crear seria una funcionalidad para que también la pueda usar el usuario? Esta duda me surge porque al modularizar una operación no se si esas funcionalidades serian publicas también, o debo dejarlas como privadas, tendría utilidad para el usuario crear un nodo sin el dato?

2) Si tengo un TAD de listas, las funcionalidades se verían comprometidas dependiendo de la estructura que utilice para almacenar los datos no?, aunque en una lista con enlace o un vector se puedan ver como listas (verlo abstractamente) no creo que se puedan reutilizar las funcionalidades con una estructura de datos de tipo, por ejemplo lista enlazada con la de un vector, mi duda surge porque se dice que el usuario no debe conocer que estructura de datos se utiliza, y si es un vector, las funcionalidades deberían recibir, además del vector, también una posición y en esa situación el usuario estaría sabiendo la estructura que se esta utilizando en la implementación del TAD

Disculpa si fui muy extensa pero quería hacerme entender, si me pueden ayudar estaría agradecida, saludos! :laugh:
#3
Programación C/C++ / Arbol binario de busqueda
11 Septiembre 2021, 22:49 PM
Hola! como andan? Queria consultarles si me pueden ayudar a encontrar el error, no me funciona correctamente, lo mas probable es que este a la hora eliminar me estoy salteando algo y no se que es, desde ya muchas gracias! ;D ;D

A la hora de mostrar el arbol resultante se transforma en un bucle infinito, me empieza a mostrar direcciones de memoria
void eliminar (Arbol * ppio, int x)
{ // Busca el elemento que se desea eliminar
if (esVacio(*ppio)) return;
else if (x < (*ppio)->dato)
// Si el valor es menor se recorre por la izquierda
eliminar(&(*ppio)->hizq,x);

else if (x > (*ppio)->dato)
// Si el valor es mayor se recorre por la derecha
eliminar(&(*ppio)->hder,x);

else
// Si ya encontraste el valor
eliminar_elemento (ppio);

}
void eliminar_elemento (Arbol * a)
{ // Elimina el elemento que se desea
if (esHoja(*a))
// Si es una hoja
free(*a);

else if (esPadreCompleto(*a))
{ // Si es padre con dos hijos
Arbol * min = minimo(&(*a)->hder);
(*a)->dato = (*min)->dato;
free(*min);
}
else
// Si tiene solo un hijo
a = reemplazar(a);
}
Arbol * minimo (Arbol * a)
{ // Busca el menor elemento
if (esVacio(*a)) return NULL; // Retornas nulo si el arbol esta vacio
if (!esVacio((*a)->hizq))
// Si tiene hijo izquierdo
return minimo(&(*a)->hizq); // Buscamos la parte mas izq posible
else
// Si no tiene hijo izq
return a; // Retornamos el mismo nodo

}
Arbol * reemplazar (Arbol * a)
{ // Reemplaza los valores padre con hijo
Arbol aux;
if (!esVacio((*a)->hizq))
{
aux = *a;
*a = (*a)->hizq;
free(aux);
} else
{
aux = *a;
(*a) = (*a)->hder;
free(aux);
}
return a;
}
#4
Programación C/C++ / Pasar puntero en recursion
29 Agosto 2021, 06:46 AM
Hola! como andan? Ya he hecho varios post respecto a los punteros y de a poco le estoy agarrando la mano gracias a sus consejos.  ;D
Ahora estoy creando una lista en donde voy agregando los elementos al final de modo recursivo, pero me sale ciertos errores, entiendo que es un problema en los punteros pero he visto varias funcionalidades de otras personas que lo escriben asi y al parecer no les sale el mismo inconveniente, o como seria la correcta forma de escribirlo? si me pueden ayudar seria de gran ayuda!
  ;-)

#include <stdio.h>
#include <stdlib.h>

typedef struct rLista
{
int dato;
struct rNodo * sig;
} * tLista;

tLista * crear_nodo (int nuevo_dato)
{
tLista * nuevo_elemento = (tLista*) malloc (sizeof(tLista));
(*nuevo_elemento)->dato = nuevo_dato;
(*nuevo_elemento)->sig = NULL;
return nuevo_elemento;
}
tLista agregar_final (tLista * ppio, tLista * nuevo_elemento)
{
if (!ppio) ppio = nuevo_elemento;
else
ppio->sig = agregar_final(ppio->sig,nuevo_elemento); //error: '*ppio' is a pointer; did you mean to use '->'?

return *ppio;
}
int contar_elementos (tLista * ppio)
{
int contador;

if (!ppio) return 0;
else contador = contar_elementos(ppio->sig); // error: '*ppio' is a pointer; did you mean to use '->'?

return contador;
}


int main (void)
{
tLista ppio = NULL;

ppio = agregar_final(&ppio,crear_nodo(5));

return 0;
}
#5
Programación C/C++ / Puntero doble
15 Agosto 2021, 06:30 AM
Buenas noches! como andan? queria consultarles algo que me tiene un poco confundida...


typedef struct tDATO {
int DNI;
char * nombre;
} DATO;
typedef struct tCola {
DATO contenido;
struct tCola *sgte;
} * COLA;

int main (void) {
COLA * ppio = inicializar(ppio);


Como 'COLA' es un puntero entonces 'ppio' seria un doble puntero? si no es asi, como seria su correcta definicion?

Utilizo este modo ya que necesito pasar parametros por referencia para que sus datos se modifiquen en los modulos, pero termina siendo medio engorroso a la hora de acceder a sus campos, siempre me salen muchos errores,por ejemplo este me salio sin ningun problema:


COLA * crearCola (DATO * nuevoDato) {
COLA * nuevo_elemento = (COLA*) malloc (sizeof(COLA));
(*nuevo_elemento)->contenido.DNI = nuevoDato->DNI;
strcpy((*nuevo_elemento)->contenido.nombre,nuevoDato->nombre);
(*nuevo_elemento)->sgte = NULL;
return nuevo_elemento;
}


Pero en este no, me salen un monton de errores siendo que los hice de la misma manera:

void agregarAlFinal (COLA * ppio, COLA * nuevoNodo) {
COLA * aux = ppio;
while (!esVacia(aux)) {
if (esVacia(aux->sgte)) //'*aux' is a pointer; did you mean to use '->'?
(*aux)->sgte = nuevoNodo;//warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
         aux = (*aux)->sgte;  //warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
}
}


Si me pueden ayudar seria de gran ayuda, desde ya muchas gracias!  ;-)
#6
Hola! Hice un codigo de insertar elementos ordenados en una lista enlazada, me funciono perfectamente solo que repetia la asignacion de la variable que iba a ingresar a la lista, asi:
num = 1;
agregar_lista (num);
num = 2; ,
agregar_lista (num); ... etc

ahora quise hacerlo con while, deje todo como estaba solamente modifique ese procedimiento, pero no se por que no funciona, no lee lo que hay dentro del while como tampoco lo que hay fuera, incluso intente mostrar en pantalla mensajes al iniciar el programa y tampoco sirve, a que se debe? Antes funcionaba sin ningun problema  :(

#include <stdio.h>
#include <stdlib.h>

typedef struct rNodo {
    int dato;
    struct rNodo * siguiente;
}tNodo;
typedef struct rLista {
    tNodo * primero;
    tNodo * ultimo;
    int longitud;
}tLista;

typedef tNodo * Nodo;
typedef tLista * Lista;


tLista * inicializar (Lista lista);
tNodo * crear_nodo (int nuevo_dato);
tLista * ins_de_orden_ascen (Lista lista, Nodo nuevo_nodo);


int main(void)
{
    Lista lista = inicializar(lista);
    int nuevo_dato;
    int finalizar = 1;
do {
printf("ingrese un numero:");
        scanf("%i", &nuevo_dato);
        lista = ins_de_orden_ascen(lista, crear_nodo(nuevo_dato));
        printf("Quiere ingresar otro numero? 1(si) o 0(no):");
        scanf("%i", &finalizar);
        } while (finalizar == 1);

    return 0;
}


tLista * inicializar (Lista lista) {
    Lista nueva_lista = (tLista*) malloc (sizeof (tLista));
    nueva_lista->primero = NULL;
    nueva_lista->ultimo = NULL;
    nueva_lista->longitud = 0;
    return nueva_lista;
}
tNodo * crear_nodo (int nuevo_dato) {
    Nodo nuevo_elemento = (tNodo*) malloc (sizeof (tNodo));
    nuevo_elemento->dato = nuevo_dato;
    nuevo_elemento->siguiente = NULL;
    return nuevo_elemento;
}
tLista * ins_de_orden_ascen (Lista lista, Nodo nuevo_nodo) {
    if (lista->longitud == 0) { // Si la lista es vacia
        nuevo_nodo->siguiente = lista->primero;
        lista->primero = nuevo_nodo;
        lista->ultimo = nuevo_nodo;
    } else {
        Nodo aux = lista->primero; // aux apunta al primer elemento
        Nodo sig;
        int encontro = 0;
        while (encontro == 0) {
            sig = aux->siguiente; // sig apunta al siguiente elemento de aux
             if (aux->dato > nuevo_nodo->dato) { // Si el nuevo elemento es menor al elemento actual
                    nuevo_nodo->siguiente = aux;
                    lista->primero = nuevo_nodo;
                    encontro = 1;
             } else
                 if ((aux->dato < nuevo_nodo->dato) && (sig == NULL)) { // Si el nuevo elemento es mayor al ultimo de la lista
                            nuevo_nodo->siguiente = aux->siguiente;
                            aux->siguiente = nuevo_nodo;
                            lista->ultimo = nuevo_nodo;
                            encontro = 1;
                        } else
                            if ((aux->dato < nuevo_nodo->dato) && (sig->dato > nuevo_nodo->dato)) { // Si se encuentra en el medio de la lista
                                nuevo_nodo->siguiente = aux->siguiente;
                                aux->siguiente = nuevo_nodo;
                                encontro = 1;
                            } else
                                aux = aux->siguiente;
        }
    }
    lista->longitud++; // Aumenta la cantidad de elementos
    return lista;
}
#7
Hola gente!, estaba leyendo un codigo en internet y me surgieron algunas dudas:

typedef struct ElementoLista
{
  char *dato;
  struct ElementoLista *siguiente;
} Elemento;

typedef struct ListaIdentificar
{
  Elemento *inicio;
  Elemento *fin;
  int tamanio;
} Lista;


int ins_en_lista_vacia (Lista * lista, char *dato) {
    Elemento *nuevo_elemento;
    if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
    {
        return -1;
    }
    if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char))) == NULL)
    {
        return -1;
    }
    strcpy (nuevo_elemento->dato, dato);
    nuevo_elemento->siguiente = NULL;
    lista ->inicio = nuevo_elemento;
    lista ->fin = nuevo_elemento;
    lista ->tamanio++;
    return 0;
}


Es una funcion para insertar un elemento a una lista vacia, en la condicion 'if' primero le asigna espacio en la memoria a 'nuevo_elemento' y despues compara ese resultado con NULL, que significa eso? Generalmente asigno NULL a los punteros que todavia no apuntan a un elemento, ademas que en esa funcion le asigno memoria a 'nuevo_elemento' y despues a 'nuevo_elemento->dato', no seria suficiente con asignar memoria solo a 'nuevo_elemento->dato'?

int main (void){
    char eleccion;
    char *nom;
    Lista *lista;
    Elemento *actual; 
    if ((lista = (Lista *) malloc (sizeof (Lista))) == NULL) return -1;
    if ((nom = (char *) malloc (50)) == NULL) return -1;


Mi otra duda es que pude notar que asigno memoria a una estructura entera, 'Lista', no a una variable de tipo 'Elemento' como hizo en la funcion de insercion, por que no hacer lo mismo con todas las estructuras? No como hizo en la funcion 'ins_en_lista_vacia' que asigno en dos situaciones. Espero no haber hecho muchas preguntas, realmente me tiene confundida este tema de asignar memoria y no encuentro un medio para poder entenderlo mejor. Desde ya muchas gracias.

#8
Hola, esto es una parte de un programa que estoy haciendo que evalúa los posibles movimientos, en este caso, de un caballo de el ajedrez, los 0 serian espacios vacíos, el punto de partida seria el 0 de la posición v[4][0]:
 
                                                   1 1 0 1 1
                                                    1 1 1 1 1
                                                    1 0 1 1 1
                                                    1 1 1 1 1
                                                    0 1 1 1 1


int main (){
    int a=4,b=0;
    int v[N][M]={(1,1,0,1,1),(1,1,1,1,1),(1,0,1,1,1),(1,1,1,1,1),(0,1,1,1,1)};
    printf(" return--> %i ",mov1(v,&a,&b)); //devuelve 1
    printf(" return--> %i ",mov1(v,&a,&b)); // pero aca devuelve 0
    return 0;
}
int mov1 (int v[N][M],int *a,int *b){
   if (v[*a-2][*b+1]==0){
       *a=*a-2;
       *b=*b+1;
       return 1;
   }else{
            return 0;
   }
}


Este código debería retornar dos veces 1 pero desconozco la razón del porqué en la segunda invocación no me evalúa correctamente la condición de if y me devuelve 0, se deberá a que estoy utilizando mal los punteros?