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