Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: HellDom89x en 23 Noviembre 2017, 08:45 am



Título: Ayuda con ejercicio en C.
Publicado por: HellDom89x en 23 Noviembre 2017, 08:45 am
Hola.

Mi programa debe reordenar una cadena de texto leída desde un archivo con base en una palabra que ingresa el usuario y que se ordena alfabéticamente.
Por ejemplo:
 HOLA
Texto: VENCER EL TEMOR AL FRACASO
Nc = 4 *número de caracteres de la palabra dada.
HOLA
VENC
EREL
TEMO
RALF
RACA
SOXX

Y tiene que terminar así:

AHLO
CVNE
LE ER
OTME
FR LA
ARCA
XSXO

El código es este:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<ctype.h>

main()

{

FILE *B;

char *A;

char **D;

char PC[16], Ord[16], N[90], archivo[50];

    int Nc, Nct, Nf, i, j, w, x, y;

    char z;

      

    printf("Dame una palabra de 15 caracteres o menos:\n");

    scanf("%s",PC);

      

    Nc=strlen(PC);

    

printf("Indica el nombre del archivo escribiendo la extension\n");

scanf("\n%s",&archivo);

B=fopen(archivo,"r+t");

if((B=fopen(archivo,"r+t"))==NULL)

{

printf("\nError");

}

else

{

printf("\nArchivo valido\n");

while ((fscanf(B,"%s",&N))!=EOF)

{

printf("\n%s\n",N);

}

}



Nct=strlen(N);

Nf=Nct/Nc;


printf("\nNumero de caracteres en texto: %d",Nct);

printf("\nNumero de columnas: %d , Numero de filas: %d",Nc,Nf);


strcpy(Ord,PC);


for(i=1;i<Nc;i++)

        {

for(j=0;j<Nc-i;j++)

        {

            if((tolower(Ord[j]))>(tolower(Ord[j+1])))

                {

                z=Ord[j];

                Ord[j]=Ord[j+1];

                Ord[j+1]=z;

                }

        }

    }

    printf("\nTu palabra es: %s\n",PC);

    printf("Tu palabra ordenada es: %s\n",Ord);

    strupr(PC);

    for(i=0;i<Nc;i++)

    {

    printf(" %c ",PC);

}

  puts("\n");

for(i=0; i<Nc; i++)

  {

  printf(" %c ",N); 

  }

  puts("\n");

  for(i=Nc; i<Nc+Nc; i++)

  {

  printf(" %c ",N);

  }


A=&N[90];


A=(char*)malloc(Nf*Nc*sizeof(char));
for(i=0;i<Nf;i++)
{
for(j=0;j=Nc;j++)
{
A[w]=(i*Nc)+j;
}
}


D=(char**)malloc(Nf*sizeof(char*));

for(i=0;i=Nf;i++)
{
D=(char*)malloc(Nc*sizeof(char));
}

for(i=0;i<Nf;i++)
{
for(j=0;j<Nc;j++);
{
printf("%s",A);
}
}

for(i=0;i=Nf;i++)
{
free(D);
}

getchar();
getchar();

}

El problema es que, al crear el arreglo dinámico para cadenas, no lo lee y el programa deja de funcionar. Tampoco lee la matriz de caracteres.