AJIKALLI » 12 июл 2007, 16:35
2. Пусть файлы А и В, компоненты которых являются целыми числами, упорядоченны по возрастанию. Получить в файле С все числа файлов А и В без повторений. Файл С тоже упорядочить по возрастанию.
Я вот написал такую прогу: #include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main( void )
{
FILE *In1, *In2, *Out;
int i1,i,j,i2,j1,v,k;
int N,M,L,Q;
int *A,*B,*C,*D;
clrscr();
A=(int*)malloc(N*sizeof(int));
B=(int*)malloc(L*sizeof(int));
C=(int*)malloc(M*sizeof(int));
D=(int*)malloc(Q*sizeof(int));
In1 = fopen("a.Txt", "rt");
In2 = fopen("b.Txt", "rt");
fscanf(In1,"%d",&N);
printf("N=%d\n",N);
i=0;
while (!feof(In1))
{
fscanf(In1, "%d\n", &A);
printf("A[%d]=%d\n",i,A);
i++;
}
printf("\n\n");
fscanf(In2,"%d",&L);
printf("L=%d\n",L);
j=0;
while (!feof(In2))
{
fscanf(In2, "%d\n", &B[j]);
printf("B[%d]=%d\n",j,B[j]);
j++;
}
//===========================================================
i1=0;
j1=0;
M=0;
while ((i1<=N) && (j1<=L))
{
M=M+1;
if (A[i1]<=B[j1])
{
C[M]=A[i1];
i1+=1;
}
else
{
C[M]=B[j1];
j1+=1;
}
}
if (i1<=N)
for (k=i1; k < N; k++)
{
M += 1;
C[M]=A[k];
}
else
for (k=j1; k < L; k++)
{
M+=1;
C[M]=B[k];
}
//======================================================
Q=0;
for (k=0; k <= M; k++)
{
v=0;
while ((v<=Q) && (D[v] != C[k]))
v+=1;
if (v>Q)
{
Q+=1;
D[Q]=C[k];
}
}
//=======================================================
Out = fopen("c.txt", "wt");
printf("\n\n");
fprintf(Out,"HOBbIU OTCOPTUPOBAHHbIU MACCUB:\n");
printf("HOBbIU OTCOPTUPOBAHHbIU MACCUB:\n");
fprintf(Out,"Q=%d\n",Q);
printf("Q=%d\n",Q);
for (v=0;v<=Q;v++)
fprintf(Out,"D[%d]=%d\n",v,D[v]);
for (v=0;v<=Q;v++)
printf("D[%d]=%d\n",v,D[v]);
printf("\n\n");
printf("OTCOPTUPOBAHHbIU MACCUB nOMEWEH B FAUJI 'C' ");
//=======================================================
fclose(Out);
fclose(In1);
fclose(In2);
getch();
free(A);
free(B);
free(C);
free(D);
}
Данные он считывает правильно, а вот в новый файл и соответственно на экран выводит полную хрень. Кто может, подскажите что тут не так (((
2. Пусть файлы А и В, компоненты которых являются целыми числами, упорядоченны по возрастанию. Получить в файле С все числа файлов А и В без повторений. Файл С тоже упорядочить по возрастанию.
[u]Я вот написал такую прогу: [/u]#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
void main( void )
{
FILE *In1, *In2, *Out;
int i1,i,j,i2,j1,v,k;
int N,M,L,Q;
int *A,*B,*C,*D;
clrscr();
A=(int*)malloc(N*sizeof(int));
B=(int*)malloc(L*sizeof(int));
C=(int*)malloc(M*sizeof(int));
D=(int*)malloc(Q*sizeof(int));
In1 = fopen("a.Txt", "rt");
In2 = fopen("b.Txt", "rt");
fscanf(In1,"%d",&N);
printf("N=%d\n",N);
i=0;
while (!feof(In1))
{
fscanf(In1, "%d\n", &A[i]);
printf("A[%d]=%d\n",i,A[i]);
i++;
}
printf("\n\n");
fscanf(In2,"%d",&L);
printf("L=%d\n",L);
j=0;
while (!feof(In2))
{
fscanf(In2, "%d\n", &B[j]);
printf("B[%d]=%d\n",j,B[j]);
j++;
}
//===========================================================
i1=0;
j1=0;
M=0;
while ((i1<=N) && (j1<=L))
{
M=M+1;
if (A[i1]<=B[j1])
{
C[M]=A[i1];
i1+=1;
}
else
{
C[M]=B[j1];
j1+=1;
}
}
if (i1<=N)
for (k=i1; k < N; k++)
{
M += 1;
C[M]=A[k];
}
else
for (k=j1; k < L; k++)
{
M+=1;
C[M]=B[k];
}
//======================================================
Q=0;
for (k=0; k <= M; k++)
{
v=0;
while ((v<=Q) && (D[v] != C[k]))
v+=1;
if (v>Q)
{
Q+=1;
D[Q]=C[k];
}
}
//=======================================================
Out = fopen("c.txt", "wt");
printf("\n\n");
fprintf(Out,"HOBbIU OTCOPTUPOBAHHbIU MACCUB:\n");
printf("HOBbIU OTCOPTUPOBAHHbIU MACCUB:\n");
fprintf(Out,"Q=%d\n",Q);
printf("Q=%d\n",Q);
for (v=0;v<=Q;v++)
fprintf(Out,"D[%d]=%d\n",v,D[v]);
for (v=0;v<=Q;v++)
printf("D[%d]=%d\n",v,D[v]);
printf("\n\n");
printf("OTCOPTUPOBAHHbIU MACCUB nOMEWEH B FAUJI 'C' ");
//=======================================================
fclose(Out);
fclose(In1);
fclose(In2);
getch();
free(A);
free(B);
free(C);
free(D);
}
Данные он считывает правильно, а вот в новый файл и соответственно на экран выводит полную хрень. Кто может, подскажите что тут не так (((