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

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

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

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

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

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

задача: нужно посчитать выражение с матрицами.(использовать подпрограммы, не используя глобальные переменные) Матрицы и их размерности считывать из файлов либо вводить с клавиатуры (выполнить с помощью простейшего меню). Результаты выводить в файл либо на экран.
Проблема в том что считав размерность (обозначенную переменной К) не могу передать её для последующего использования в основную программу.
К присваивается какое-то произвольное значение.
подскажите пожалуйста как это сделать????(без глобальной переменной)
Код:
 #include <stdio.h>
#include <conio.h>
#include <math.h>
void FVvod(int K, char*name,char*r,float X[8][8])
{
FILE *ft;
unsigned char i,j;
ft=fopen(name,r);
fscanf(ft,"%d",&K);
for(i=0;i<K;i++)
for(j=0;j<K;j++)
fscanf(ft,"%f",&X[i][j]);
fclose(ft);
}

void KVvod(unsigned char N1,float X[8][8],char T)
{
unsigned char i,j;
for(i=0;i<N1;i++)
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[8][8], float Y[8][8], float Z[8][8])
{
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[8][8], float Y[8][8],float Z[8][8])
{
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[8][8],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, char*name, char*r, float X[8][8],char T)
{
FILE *f;
unsigned char i,j;
f=fopen(name,r);
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[8][8],B[8][8],C[8][8],D[8][8];
unsigned char p,q,N,P;
int K;
clrscr();
printf("Vvod: s klaviaturu press '1',iz file press '2' ");
scanf ("%d",&p);
if(p==1)
	{
	printf("Vvedite razmernost' kvadratnoy matricu: ");
	scanf ("%d",&N);
       P=N;
       KVvod(N,A,'A');
       KVvod(N,B,'B');
	}
else if(p==2)
	{
	P=K;
	printf("Vvod matric iz faylov\n");
	FVvod(K,"D:\\Matr_A.txt","rt",A);
	FVvod(K,"D:\\Matr_B.txt","rt",B);
	}
Proiz(P,A,B,D);
UML(P,3,1,A,D,C);
printf("Vuvod rezult:na ekran press '1',v file press '2' ");
scanf("%d",&q);
if(q==1)
	EVuvod(P,C,'C');
else if(q==2)
	{
	FVuvod(P,"D:\\Matr_C.txt","wt",C,'C');}
printf("end");
getch();
}
Ledom вне форума Ответить с цитированием
Старый 20.11.2010, 18:35   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Передавать надо по ссылке:
Код:
void FVvod(int& K, char*name,char*r,float X[8][8])
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.11.2010, 18:37   #3
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Компилятор ругается...
) expected

Последний раз редактировалось Ledom; 20.11.2010 в 18:51.
Ledom вне форума Ответить с цитированием
Старый 20.11.2010, 18:49   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
Компилятор ругается...
Гениально.
Какие ошибки то?
{Уже добавили позже}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

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

) expected
Ledom вне форума Ответить с цитированием
Старый 20.11.2010, 19:23   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

у меня ошибок нет как при передаче по ссылке так и по значению
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 20.11.2010, 19:26   #7
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
у меня ошибок нет как при передаче по ссылке так и по значению
можно пожалуйста по подробнее как именно реализовать передачу по ссылке..
Ledom вне форума Ответить с цитированием
Старый 20.11.2010, 19:49   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Тут просто всё!
Обьявить функцию так
int func(int arg);
то передавая ей переменную , функции на самом деле передаётся копия переменной.
И какие бы манипуляции с переменной в функции мы не проводили в основной программе она остаётся той же.
Но если обьявить функцию как
int func(int& arg) то функции уже передаётся ссылка на переменную с которой мы функцию вызываем! Соответствено мы уже работаем с адресом по которому лежит переменная которую мы передали в качестве аргумента. Отсюда изменения значения переменной в функции, изменит её и в основной программе
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 20.11.2010, 20:02   #9
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

а как это записать при наличии нескольких переменных, как в моем случае??
void FVvod(int& K, char*name,char*r,float X[8][8]) ??
если так то компилятор выдает ошибку ") expected" и указывает на место между & и К
Ledom вне форума Ответить с цитированием
Старый 20.11.2010, 20:06   #10
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
void FVvod(int& K, char*name,char*r,float X[8][8]) ??
если так то компилятор выдает ошибку ") expected" и указывает на место между & и
Я то думаю, что за мозгопудрилка, а вы на С шпарите. Вот, что значит элегантное название "Общие вопросы С/С++"...
Нема ссылок в С. Используйте указатели: передавайте адрес K и изменяйте разыменованием.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить значения переменной внутри процедуры kartalex Помощь студентам 5 20.11.2010 18:44
Подстановка значения переменной как поле записи Noktikus Общие вопросы Delphi 2 17.04.2010 18:01
Параметры переменной и значения Asira Помощь студентам 13 23.12.2009 23:22
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
как из dll передавать данные в основную программу? andrey4623 Общие вопросы Delphi 5 06.08.2007 10:15