Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-09-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Problemas con memoria dinamica

Hola amigos, esto es C pero no sabia donde ponerlo.
El caso es que estoy intentando crearme un pequeño codigo al que le diga el numero de columnas y filas y las palabras a colocar y que me cree una sopa de letras con ellas. El codigo lo encontre por internet pero no usaba memoria dinamica asi que lo he modificado y antes de modificarlo iba bien pero ahora me da errores al intentar añadir las palabras y al intentar rellenar la sopa de letras y estoy seguro de que estoy haciendo algo mal al trabajar con los punteros de la memoria que he obtenido pero no se que. ¿pueden ayudarme?
Este es el codigo:
Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define LARGOMAX 21

// Llena la matriz con caracteres /0
void inicializa(char **mint filasint columnas) {
    
int ij;

    for (
0filasi++)
        for (
0columnasj++)
            
m[i][j] = '\0';
}

void PedirPalabras(char **palabrasint nPalabras){
   
int i,x;

   for (
0nPalabrasi++){
      
printf("Introduce una palabra: ");
      
scanf("%s"palabras[i]);
      for (
0LARGOMAXx++){
         
palabras[i][x]=toupper(palabras[i][x]);
      }
   }
}

// Llena los espacios vacíos con caracteres al azar
void rellena(char **mint filasint columnas) {
    
int ij;

    for (
0filasi++)
        for (
0columnasj++)
            if (
m[i][j] == '\0')
                
m[i][j] = rand() % 26 65;
}

// Muestra la sopa de letras
void muestra(char **mint filasint columnas) {
    
int ij;

    
printf("\n\n");
    for (
0filasi++) {
        for (
0columnasj++)
            
printf("%c "m[i][j]);
        
printf("\n");
    }
}

// Valida que la palabra s se pueda agregar a la matriz m
// en la posición (x, y) y en la dirección (dx, dy)
int valida(char **mint filasint columnas, const char *sint xint yint dxint dy) {
    
int i1;

    for (
0< (int)strlen(s); i++, += dx+= dy){
        if (
|| || >= columnas || >= filas || (m[y][x] != s[i] && m[y][x] != '\0')){
            
0;
            break;
        }
    }
    if(
v==1)
      
printf("\n%s puede agregarse (x%d, y%d, dx%d, dy%d): %d"sxydxdyv);

    return 
v;
}

// Agrega la palabra s a la sopa de letras
void agrega(char **mint filasint columnas, const char *s) {
    
int ixydxdy;

    
dx rand() % 1;
    
dy rand() % 1;
    
dx dx == dx;
    while (!
valida(mfilascolumnassrand() % columnasrand() % filasdxdy)) ;
    for (
0< (int)strlen(s); i++, += dx+= dy)
        
m[y][x] = s[i];
}

int main() {
    
// Las palabras que se van a agregar a la sopa de letras
    // Deben ser tantas palabras como la definción de PAL
    // Escritas en mayúsculas para que se vean bien
    
char **m, **palabras;
    
int i;
    
int filascolumnasnPalabras;
    
srand(time(0));

    
printf("Introduce el numero de caracteres horizontales: ");
    
scanf("%d",&columnas);
    
printf("Introduce el numero de caracteres verticales: ");
    
scanf("%d",&filas);

    
//Obtengo la memoria suficiente para el array que contendrá la sopa de letras
    
if (( mallocfilas*sizeofchar* ))) == NULL )
    {
      
/* error */
    
}else{

      for ( 
0filasi++ )
      {
         if (( 
m[i] = malloccolumnas )) == NULL )
         {
            
/* error */
         
}else{
            
//Obtengo la memoria suficiente para el array que contendrá las palabras a colocar en sopa de letras
            
printf("Introduce el numero de palabras a colocar: ");
            
scanf("%d",&nPalabras);

            if (( 
palabras mallocnPalabras*sizeofchar* ))) == NULL )
            {
               
/* error */
            
}else{
               for ( 
0nPalabrasi++ )
               {
                  if (( 
palabras[i] = mallocLARGOMAX )) == NULL )
                  {
                     
/* error */
                  
}else{
                     
//Obtengo las palabras y las almaceno en el array
                     
PedirPalabras(palabrasnPalabras);

                     
//Lleno la sopa de letra con \0's
                     
inicializa(m,filas,columnas);

                     
//Coloco las palabras en la sopa de letra
                     
for (0nPalabrasi++)
                        
agrega(mfilascolumnaspalabras[i]);

                     
//Muestro como quedan las palabras
                     
muestra(mfilascolumnas);
                     
getchar();

                     
//Relleno los huecos de la sopa de letra
                     
rellena(mfilascolumnas);
                     
getchar();

                     
//Muestro como queda la sopa de letra
                     
muestra(mfilascolumnas);
                     
getchar();
                  }
               }
            }
         }
      }
    }

    
//Libero la memoria de la matriz de la sopa de letras
    
if( != NULL ){
      for ( 
0filasi++ )
      {
         if (
m[i] != NULL)
         {
            
free(m[i]);
         }
      }
    }
    
free(m);

    
//Libero la memoria de la matriz de las palabras
    
if( palabras != NULL ){
      for ( 
0nPalabrasi++ )
      {
         if (
palabras[i] != NULL)
         {
            
free(palabras[i]);
         }
      }
    }
    
free(palabras);
    return 
0;

Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Array dentro de un Array Holger PHP 4 03-01-2012 17:27:44
Multidimensional arrays nemesis JAVA 1 12-10-2008 01:07:42
problemas con array o array noodle_ OOP 7 19-06-2008 22:30:57
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
FFT multidimensional i.larranaga Varios 0 04-02-2004 11:51:49


La franja horaria es GMT +2. Ahora son las 23:03:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi