Консультация № 178422
16.05.2010, 13:31
0.00 руб.
17.05.2010, 13:09
0 2 1
День добрый,уважаемые эксперты,первый раз пишу в эту тему,так что прошу сильно не пинать,если будут какие-либо ошибки.
Имеется следующая рабочая программа (в приложении).

Она работает верно,но допущена как минимум 1 серьезная ошибка: предпоследняя строчка не заслуживает права жить( printf("Minimal element of array C: %5.3f\nThe number of minimal element: %i",CMIN,k); ) Вывод должен быть осуществлен через главную программу,а не через подпроцесс. Нужно верно перенести этот вывод в главную с сохранением работоспосбности. Программа для Borland C 3.1,запущена под xp. Не знаю можно ли,но если из вышеприведенной и уже верной программы будет сделан проект,то благодарность будет чуть выше. Надеюсь вы понимаете,о чем я?)


Приложение:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>

void multiply(float *a, float **b, float *c, int n);
void findmin(float *a, int n);
void output(float *a,int n);

void main()
{
int i,j,n;
float *A, **B, *C,temp;
clrscr();

printf("Enter the size of array: ");
scanf("%i",&n);

A=(float*)malloc(n*sizeof(float));


B=(float**)malloc(n*sizeof(float));
for(i=0;i<n;i++)
B[i]=(float*)malloc(n*sizeof(float));

C=(float*)malloc(n*sizeof(float));


printf("Enter the elements of array A[%i]:\n",n);
for(i=0;i<n;i++)
{ scanf("%f",&temp);
A[i]=temp;
}
printf("Array B[%i][%i]:\n",n,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
B[i][j]=A[i]-A[j];
printf("%6.3f ",B[i][j]);

}
puts("");
}
puts("");
printf("Array C[%i] = AxB: \n",n);

multiply(A,B,C,n);

output(C,n);
findmin(C,n);
puts("");
printf("Press any key... \n");
getch();
}

void output(float *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%6.3f ",a[i]);
puts("\n");

}

void multiply(float *a, float **b, float *c, int n)
{
int i,j;
float S;
for(j=0;j<n;j++)
{
S=0;
for(i=0;i<n;i++)
{
S+=a[i]*b[i][j];
c[j]=S;
}
}
}

void findmin(float *a, int n)
{
int i,k;
float CMIN;
CMIN=a[0];
k=0;
for(i=0;i<n;i++)
if(a[i]<CMIN)
{
CMIN=a[i];
k=i+1;
}
printf("Minimal element of array C: %5.3f\nThe number of minimal element: %i",CMIN,k);
}

Обсуждение

давно
Академик
320937
2216
18.05.2010, 08:38
общий
Aptemis:
Доброе утро! Посмотрите, пожалуйста! TurboC 2.0
Код:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>

void multiply(float *a, float **b, float *c, int n);
void findmin(float *a, int n, int *pnum, float *pmin);
void output(float *a,int n);

void main()
{
int i,j,n;
float *A, **B, *C,temp;

int num;
float min;

clrscr();

printf("Enter the size of array: ");
scanf("%i",&n);

A=(float*)malloc(n*sizeof(float));


B=(float**)malloc(n*sizeof(float));
for(i=0;i<n;i++)
B[i]=(float*)malloc(n*sizeof(float));

C=(float*)malloc(n*sizeof(float));


printf("Enter the elements of array A[%i]:\n",n);
for(i=0;i<n;i++)
{ scanf("%f",&temp);
A[i]=temp;
}
printf("Array B[%i][%i]:\n",n,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
B[i][j]=A[i]-A[j];
printf("%6.3f ",B[i][j]);

}
puts("");
}
puts("");
printf("Array C[%i] = AxB: \n",n);

multiply(A,B,C,n);

output(C,n);
findmin(C,n, &num, &min);

printf("Minimal element of array C: %5.3f\nThe number of minimal element: %i", min, num);

puts("");
printf("Press any key... \n");
getch();
}

void output(float *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%6.3f ",a[i]);
puts("\n");

}

void multiply(float *a, float **b, float *c, int n)
{
int i,j;
float S;
for(j=0;j<n;j++)
{
S=0;
for(i=0;i<n;i++)
{
S+=a[i]*b[i][j];
c[j]=S;
}
}
}

void findmin(float *a, int n, int *pnum, float *pmin)
{
int i;
*pmin=a[0];
*pnum=0;
for(i=0;i<n;i++)
if(a[i]<*pmin)
{
*pmin=a[i];
*pnum=i+1;
}
}

давно
Профессор
230118
3054
18.05.2010, 10:42
общий
это ответ
Здравствуйте, Aptemis.

Чтобы вывести найденное значение в главной программе, сделайте функцию findmin не void , а float. Значение k можно передать через указатель.
float findmin(float *a, int n, int *pk){ int i,k; float CMIN; CMIN=a[0]; k=0; for(i=0;i<n;i++) if(a[i]<CMIN) { CMIN=a[i]; k=i+1; }
*pk=k;
return CMIN;
}
Переменную не стоит писать заглавными буквами, по традиции так пишут константы, определенные через #define

В главной программе можно поставить вызов функции findmin(C,n) в printf
printf("Minimal element of array C: %5.3f\nThe number of minimal element: %i",findmin(C,n), *pk);}
Форма ответа