Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2010, 01:18   #1
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
Вопрос Динамическая память

Доброго времени суток) помогите пожалуйста разобраться..
возникли проблемы с программой, когда стал заменять статическую память на динамическую... т.к с таковой мало знаком написал из примера...
ошибок нет... но при работе выдает: scanf: floating point formats not linked Abnormal program termination
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <alloc.h>

void FVvod(unsigned char *K,float **X, char T)
{

unsigned char i,j,R;
char name[30];
FILE *ft;
printf("Vvedite adres fayla c matricey %c:",T);
scanf("%s",name);
ft=fopen(name,"rt");
fscanf(ft,"%d",&R);
*K=R;
X=(float**)malloc(R*sizeof(float*));
for(i=0;i<R;i++)
{
X[i]=(float*)malloc(R*sizeof(float));
for(j=0;j<R;j++)
fscanf(ft,"%f",&X[i][j]); //в этом месте выдает при работе ошибку и завершает прогу
}
fclose(ft);
}

void KVvod(unsigned char N1,float **X,char T)
{
unsigned char i,j;
X=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
X[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
	{
	printf("vvedite element matricu %c [%d,%d] ",T,i,j);
	scanf("%f",&X[i][j]);//в этом месте выдает при работе ошибку и завершает прогу
	}
}}

void UML(unsigned char N1,float L,float M, float **X, float **Y, float **Z)
{
unsigned char i,j;
for(i=0;i<N1;i++)
for(j=0;j<N1;j++)
Z[i][j]=L*X[i][j]-M*Y[i][j];
}

void Proiz(unsigned char N1, float **X, float **Y,float **Z)
{
unsigned char i,j,k;
for(i=0;i<N1;i++)
for(j=0;j<N1;j++)
{Z[i][j]=0;
for(k=0;k<N1;k++)
Z[i][j]+=X[i][k]*Y[k][j];
}}

void EVuvod(unsigned char N1, float **X,char T)
{
unsigned char i,j;
for(i=0;i<N1;i++)
{ printf("\n");
for(j=0;j<N1;j++)
printf("%c[%d][%d]=%-5.2f\t",T,i,j,X[i][j]);
}}

void FVuvod(unsigned char N1,float **X,char T)
{
FILE *f;
unsigned char i,j;
char name[30];
printf("Vvedite adres fayla dlia sohraneniya matricu %c:",T);
scanf("%s",name);
f=fopen(name,"wt");
for(i=0;i<N1;i++)
{
fprintf(f,"\n");
for(j=0;j<N1;j++)
fprintf(f,"%c[%d][%d]=%-5.2f\t ",T,i,j,X[i][j]);
}
fclose(f);
}

void main()
{
float **A,**B,**C,**D;
unsigned char p,q,K,N,P;
clrscr();
printf("Vvod: s klaviaturu press '1',iz file press '2': ");
scanf ("%d",&p);
switch(p)
{case 1:
	{
	printf("Vvedite razmernost' kvadratnoy matricu: ");
	scanf ("%d",&N);
	KVvod(N,A,'A');
	KVvod(N,B,'B');
	P=N;
	break;
	}
case 2:
	{
	printf("Vvod matric iz faylov\n");
	FVvod(&K,A,'A');
	FVvod(&K,B,'B');
	P=K;
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}

}
Proiz(P,A,B,D);
UML(P,3,1,A,D,C);
printf("Vuvod rezultata:na ekran press '1',v file press '2': ");
scanf("%d",&q);
switch(q)
{
case 1:{
	EVuvod(P,C,'C');
	break;
	}
case 2:{
	FVuvod(P,C,'C');
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}
}
printf("\nend");
getch();
}
что бы это могла значить?? помогите понять??

Последний раз редактировалось Ledom; 24.11.2010 в 01:36.
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 09:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Во-первых: Я бы написал так:
Код:
float **KVvod(unsigned char N1,float **X,char T)
...
return X;
И соответственно вернул
Код:
	A=KVvod(N,A,'A');
	B=KVvod(N,B,'B');
конечно нельзя забывать что нуна память чистить.
Теперь насчет ошибки:
Код:
Proiz(P,A,B,D);
Для A B допустим память выделена. А D? Про него ты забываешь видимо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2010, 10:49   #3
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Спасибо)
нашел решение проблемы)
scanf не хочет вводить значения индексированых элементов, заменил так
Код:
{
X[i]=(float*)malloc(R*sizeof(float));
for(j=0;j<R;j++)
fscanf(ft,"%f",&W);
X[i][j]=W;
}
а как выделить память для D и С, написать подпрограмму выделения памяти???
или добавить выделения памяти в подпрограммы где создаются D и С???
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 11:06   #4
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Добавил выделение памяти для D и C но увы не работает...
Подскажите пожалуйста...
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <alloc.h>

void FVvod(unsigned char *K,float **X, char T)
{
float W;
unsigned char i,j,R;
char name[30];
FILE *ft;
printf("Vvedite adres fayla c matricey %c:",T);
scanf("%s",name);
ft=fopen(name,"rt");
fscanf(ft,"%d",&R);
*K=R;
X=(float**)malloc(R*sizeof(float*));
for(i=0;i<R;i++)
{
X[i]=(float*)malloc(R*sizeof(float));
for(j=0;j<R;j++)
fscanf(ft,"%f",&W);
X[i][j]=W;
}
fclose(ft);
}

void KVvod(unsigned char N1,float **X,char T)
{ float W;
unsigned char i,j;
X=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
X[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
	{
	printf("vvedite element matricu %c [%d,%d] ",T,i,j);
	scanf("%f",&W);
	X[i][j]=W;
	}
}}

void UML(unsigned char N1,float L,float M, float **X, float **Y, float **Z)
{
unsigned char i,j;
Z=(float**)malloc(N1*sizeof(float*));// где то тут как мне кажется проблема с выделением записью в память
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
Z[i][j]=L*X[i][j]-M*Y[i][j];
}}

void Proiz(unsigned char N1, float **X, float **Y,float **Z)
{
unsigned char i,j,k;
Z=(float**)malloc(N1*sizeof(float*));// и тут мне кажется проблема с выделением и  записью в память
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
{Z[i][j]=0;
for(k=0;k<N1;k++)
Z[i][j]+=X[i][k]*Y[k][j];
}}}

void EVuvod(unsigned char N1, float **X,char T)
{
unsigned char i,j;
for(i=0;i<N1;i++)
{ printf("\n");
for(j=0;j<N1;j++)
printf("%c[%d][%d]=%-5.2f\t",T,i,j,X[i][j]);
}}

void FVuvod(unsigned char N1,float **X,char T)
{
FILE *f;
unsigned char i,j;
char name[30];
printf("Vvedite adres fayla dlia sohraneniya matricu %c:",T);
scanf("%s",name);
f=fopen(name,"wt");
for(i=0;i<N1;i++)
{
fprintf(f,"\n");
for(j=0;j<N1;j++)
fprintf(f,"%c[%d][%d]=%-5.2f\t ",T,i,j,X[i][j]);
}
fclose(f);
}

void main()
{
float **A,**B,**C,**D;
unsigned char p,q,K,N,P;
clrscr();
printf("Vvod: s klaviaturu press '1',iz file press '2': ");
scanf ("%d",&p);
switch(p)
{case 1:
	{
	printf("Vvedite razmernost' kvadratnoy matricu: ");
	scanf ("%d",&N);
	KVvod(N,A,'A');
	KVvod(N,B,'B');
	P=N;
	break;
	}
case 2:
	{
	printf("Vvod matric iz faylov\n");
	FVvod(&K,A,'A');
	FVvod(&K,B,'B');
	P=K;
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}

}
Proiz(P,A,B,D);
UML(P,3,1,A,D,C);
printf("Vuvod rezultata:na ekran press '1',v file press '2': ");
scanf("%d",&q);
switch(q)
{
case 1:{
	EVuvod(P,C,'C');
	break;
	}
case 2:{
	FVuvod(P,C,'C');
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}
}
printf("\nend");
getch();
}

Последний раз редактировалось Ledom; 24.11.2010 в 16:56.
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 16:36   #5
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

помогите пожалуйста...
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 18:19   #6
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

пытаясь разобраться пришел к выводу, что в память не записывается матрица...
что делать? в чем ошибка??
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 19:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
в чем ошибка??
Почитай пожалуйста повнимательнее что я писал. Особенно внимательно про функцию, и как она результат возвращает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.11.2010, 19:24   #8
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

заменил:
Код:
float **KVvod(unsigned char N1,float **X, char T)
{
float W;
unsigned char i,j;
X=(float**)malloc(sizeof(float*)*N1);
for(i=0;i<N1;i++)
{
X[i]=(float*)malloc(sizeof(float)*N1);
for(j=0;j<N1;j++)
	{
	printf("vvedite element matricu %c [%d,%d] ",T,i,j);
	scanf("%f",&X[i][j]);
	X[i][j]=W;
	}
} return X;
}
в основной проге вызываю:
Код:
 A=KVvod(N,A,'A');
           B=KVvod(N,B,'B');
но все равно работает не верно
?????
Ledom вне форума Ответить с цитированием
Старый 24.11.2010, 19:33   #9
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Ошибок нет, но не считывает выдает 0
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <alloc.h>

float **FVvod(unsigned char *K,float **X, char T)
{
float W;
unsigned char i,j,R;
char name[30];
FILE *ft;
printf("Vvedite adres fayla c matricey %c:",T);
scanf("%s",name);
ft=fopen(name,"rt");
fscanf(ft,"%d",&R);
*K=R;
 X=(float**)malloc(sizeof(float*)*R);
for(i=0;i<R;i++)
{
X[i]=(float*)malloc(sizeof(float)*R);
for(j=0;j<R;j++)
fscanf(ft,"%f",&W);
X[i][j]=W;
}
fclose(ft);
return X;
}

float **KVvod(unsigned char N1,float **X, char T)
{
float W;
unsigned char i,j;
X=(float**)malloc(sizeof(float*)*N1);
for(i=0;i<N1;i++)
{
X[i]=(float*)malloc(sizeof(float)*N1);
for(j=0;j<N1;j++)
	{
	printf("vvedite element matricu %c [%d,%d] ",T,i,j);
	scanf("%f",&X[i][j]);
	X[i][j]=W;
	}
} return X;
}

void UML(unsigned char N1,float L,float M, float **X, float **Y, float **Z)
{
unsigned char i,j;
Z=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
Z[i][j]=L*X[i][j]-M*Y[i][j];
}}

void Proiz(unsigned char N1, float **X, float **Y,float **Z)
{
unsigned char i,j,k;
Z=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
{Z[i][j]=0;
for(k=0;k<N1;k++)
Z[i][j]+=X[i][k]*Y[k][j];
}}}

void EVuvod(unsigned char N1, float **X,char T)
{
unsigned char i,j;
for(i=0;i<N1;i++)
{ printf("\n");
for(j=0;j<N1;j++)
printf("%c[%d][%d]=%-5.2f\t",T,i,j,X[i][j]);
}}

void FVuvod(unsigned char N1,float **X,char T)
{
FILE *f;
unsigned char i,j;
char name[30];
printf("Vvedite adres fayla dlia sohraneniya matricu %c:",T);
scanf("%s",name);
f=fopen(name,"wt");
for(i=0;i<N1;i++)
{
fprintf(f,"\n");
for(j=0;j<N1;j++)
fprintf(f,"%c[%d][%d]=%-5.2f\t ",T,i,j,X[i][j]);
}
fclose(f);
}

void main()
{
float **A,**B,**C,**D;
unsigned char p,q,K,N,P;
clrscr();
printf("Vvod: s klaviaturu press '1',iz file press '2': ");
scanf ("%d",&p);
switch(p)
{case 1:
	{
	printf("Vvedite razmernost' kvadratnoy matricu: ");
	scanf ("%d",&N);
       A=KVvod(N,A,'A');
       B=KVvod(N,B,'B');
	P=N;
	break;
	}
case 2:
	{
	printf("Vvod matric iz faylov\n");
       A=FVvod(&K,A,'A');
       B=FVvod(&K,B,'B');
	P=K;
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}

} /*
Proiz(P,A,B,D);
UML(P,3,1,A,D,C);  */ // отключил что бы просто проверить ввод и вывод
printf("Vuvod rezultata:na ekran press '1',v file press '2': ");
scanf("%d",&q);
switch(q)
{
case 1:{
	EVuvod(P,A,'A');// вывожу считанную матрицу на экран
	break;
	}
case 2:{
	FVuvod(P,A,'A');
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}
}
printf("\nend");
getch();
}
Ledom вне форума Ответить с цитированием
Старый 26.11.2010, 00:07   #10
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

всем спасибо разобрался сам)))
может код кому-нибудь поможет))))
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <alloc.h>

float **FVvod(unsigned char *K,char T)
{
float W,**X;
unsigned char i,j,R;
char name[30];
FILE *ft;
printf("Vvedite adres fayla c matricey %c:",T);
scanf("%s",name);
ft=fopen(name,"rt");
fscanf(ft,"%d",&R);
*K=R;
X=(float**)malloc(R*sizeof(float*));
for(i=0;i<R;i++)
{
X[i]=(float*)malloc(R*sizeof(float));
for(j=0;j<R;j++)
{
fscanf(ft,"%f",&W);
X[i][j]=W;
}}
fclose(ft);
return X;
}

float **KVvod(unsigned char N1, char T)
{
float W,**X;
unsigned char i,j;
X=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
X[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
	{
	printf("vvedite element matricu %c [%d,%d] ",T,i,j);
	scanf("%f",&W);
	X[i][j]=W;
	}
}
return X;
}

float **UML(unsigned char N1,float L,float M, float **X, float **Y)
{
float **Z;
unsigned char i,j;
Z=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
Z[i][j]=L*X[i][j]-M*Y[i][j];
}
return Z;
}

float **Proiz(unsigned char N1, float **X, float **Y)
{
float **Z;
unsigned char i,j,k;
Z=(float**)malloc(N1*sizeof(float*));
for(i=0;i<N1;i++)
{
Z[i]=(float*)malloc(N1*sizeof(float));
for(j=0;j<N1;j++)
{Z[i][j]=0;
for(k=0;k<N1;k++)
Z[i][j]+=X[i][k]*Y[k][j];
}}
return Z;
}

void EVuvod(unsigned char N1, float **X,char T)
{
unsigned char i,j;
for(i=0;i<N1;i++)
{ printf("\n");
for(j=0;j<N1;j++)
printf("%c[%d][%d]=%-5.2f\t",T,i,j,X[i][j]);
}}

void FVuvod(unsigned char N1,float **X,char T)
{
FILE *f;
unsigned char i,j;
char name[30];
printf("Vvedite adres fayla dlia sohraneniya matricu %c:",T);
scanf("%s",name);
f=fopen(name,"wt");
for(i=0;i<N1;i++)
{
fprintf(f,"\n");
for(j=0;j<N1;j++)
fprintf(f,"%c[%d][%d]=%-5.2f\t ",T,i,j,X[i][j]);
}
fclose(f);
}

void main()
{
float **A,**B,**C,**D;
unsigned char p,q,K,N,P;
clrscr();
printf("Vvod: s klaviaturu press '1',iz file press '2': ");
scanf ("%d",&p);
switch(p)
{case 1:
	{
	printf("Vvedite razmernost' kvadratnoy matricu: ");
	scanf ("%d",&N);
      A=KVvod(N,'A');
      B=KVvod(N,'B');
	P=N;
	break;
	}
case 2:
	{
	printf("Vvod matric iz faylov\n");
      A=FVvod(&K,'A');
      B=FVvod(&K,'B');
	P=K;
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}

}
D=Proiz(P,A,B);
C=UML(P,3,1,A,D);
printf("Vuvod rezultata:na ekran press '1',v file press '2': ");
scanf("%d",&q);
switch(q)
{
case 1:{
	EVuvod(P,C,'C');
	break;
	}
case 2:{
	FVuvod(P,B,'C');
	break;
	}
default:{
	printf("\nNevernuy vvod >> error >> end\n");
	getch();
	}
}
printf("\nend");
getch();
}
Ledom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память zhenya.ya Помощь студентам 1 22.09.2010 08:43
Динамическая память. spotmc13 Паскаль, Turbo Pascal, PascalABC.NET 5 20.09.2010 17:08
Динамическая память Astat Помощь студентам 1 30.06.2010 20:40
Динамическая память PaulSev Общие вопросы Delphi 12 25.03.2010 09:07
Динамическая память liver1981 Общие вопросы C/C++ 5 22.04.2009 09:16