Форум программистов, компьютерный форум CyberForum.ru

Затруднения в программе - C++

Восстановить пароль Регистрация
 
akainia
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 11
26.05.2012, 13:22     Затруднения в программе #1
Здравствуйте. Когда писала программу столкнулась с вот таким вопросом от преподавателя:

C++
1
2
3
4
5
6
7
float time_max(int n, float *Uvx, float *t)
{ float max=*Uvx;
for (int i=0;i<n;i++)
if (Uvx[i]>max) max=Uvx[i];
for (int i=0;i<n;i++)
if(Uvx[i]==max) 
return t[i];}
Здесь я описываю вывод момента времени, при котором Uvx будет максимальным.
Преподаватель спросил следующее...
возможно ли заменить тип функции float на void и что при этом изменится...
Я ответила, да, возможно... но что изменится сказать не смогла. Понимаю, что return t[i] не будет...
Думаю, что будет так, но программа не хочет работать:
C++
1
2
3
4
5
6
void time_max(int n, float *Uvx, float *t)
{ float max=*Uvx;
for (int i=0;i<n;i++)
if (Uvx[i]>max) max=Uvx[i];
for (int i=0;i<n;i++)
if(Uvx[i]==max);}
За ранее большое спасибо! Для удобства я скину всю программу, в следующем сообщении...

Добавлено через 33 секунды
Файл «main.cpp»
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include<stdio.h>
#include<iostream>
#include<math.h>
#include"newfile.h"
#define N 1500
using namespace std;
 
int main() {
float t[N], Uvx[N], Uvix[N],dt;
read_file();
cout<<endl;
char ch;
cout<<"1-tablica na n tochec, 2-parametr Uvx, 3-parametr Uvix,4-zapic v fail"<<endl;
cout<<endl;
while(1)
{cout<<"Vvedite comandy"<<endl;
cin>>ch;
switch(ch)
{case '1':
int n;
cout<<endl;
cout<<"vvedite n=";
cin>>n;
cout<<"   N     i     Uvx     Uvix"<<endl;
cout<<"___________________________"<<endl;
form_t(n,t,dt);
form_Uvx(n,t,Uvx);
form_Uvix(n,Uvx,Uvix);
form_tabl(n,t,Uvx,Uvix);
break;
case '2':
{float e=0.024,p=1,time2,time1=10E+36;n=11;
while(p>e){
form_t(n,t,dt);
form_Uvx(n,t,Uvx);
time2=time_max(n,Uvx,t);
p=fabs(time1-time2);
cout<<"n="<<n<<"  time_max="<<time2<<"  p="<<p<<endl;
time1=time2;
n=2*n;}break;}
case '3':
{float e=0.02,p=1,time2,time1=10E+36;n=11;
while(p>e){
form_t(n,t,dt);
form_Uvx(n,t,Uvx);
form_Uvix(n,Uvx,Uvix);
time2=time_max(n,Uvx,t);
p=fabs(time1-time2);
cout<<"n="<<n<<"  time_max="<<time2<<"  p="<<p<<endl;
time1=time2;
n=2*n;}break;}
case'4':
n=50;
form_t(n,t,dt);
form_Uvx(n,t,Uvx);
form_Uvix(n,Uvx,Uvix);
write_file(n,t,Uvx,Uvix);
cout<<"zapis proizvedena"<<endl;break;
default: cout<<"Error"<<endl;}
char c;
cout<<endl;
cout<<"Xotite li vbI prodolgit Y/N";
cin>>c;
if(c!='Y')break;}
return 0;}
 
Файл «newmain.cpp»
#include<stdio.h>
#include<math.h>
 
void form_t(int n, float *t,float dt)
{ float tn=0.5,tk=6;
dt=(tk-tn)/(n-1);
for(int i=0;i<n;i++)
t[i]=tn+i*dt;}
 
void form_Uvx(int n,float *t,float *Uvx)
{float Um=20.5,tm=2.5,tn=0.5,tk=6;
for(int i=0;i<n;i++)
if (t[i]<=tm) Uvx[i]=Um*(t[i]-tn)/(tm-tn);
else Uvx[i]=(-Um*(t[i]-tm)/(tk-tm))+Um;}
 
void form_Uvix(int n, float *Uvx,float *Uvix)
{float a=5,b=0.05;
int Uvx1=10;
for(int i=1;i<n;i++)
if (Uvx[i]<=Uvx1) Uvix[i]=a;
else Uvix[i]=b*pow(Uvx[i],2);}
 
void form_tabl(int n,float*t,float*Uvx,float*Uvix)
{for(int i=0;i<n;i++)
printf("\n %2d %6.3f %6.3f %6.3f",i,t[i],Uvx[i],Uvix[i]);}
 
float time_max(int n, float *Uvx, float *t)
{ float max=*Uvx;
for (int i=0;i<n;i++)
if (Uvx[i]>max) max=Uvx[i];
for (int i=0;i<n;i++)
if(Uvx[i]==max) 
return t[i];}
 
void write_file(int n,float *t,float *Uvx,float *Uvix)
{FILE *f1,*f2,*f3;
f1=fopen("massiv_t.txt","w");
f2=fopen("massiv_Uvx.txt","w");
f3=fopen("massiv_Uvix.txt","w");
for (int i=0;i<n;i++)
{fprintf(f1,"\n %6.3f",t[i]);
fprintf(f2,"\n %6.3f",Uvx[i]);
fprintf(f3,"\n %6.3f",Uvix[i]);}
fclose(f1);
fclose(f2);
fclose(f3);}
 
void read_file()
{ FILE *f=fopen("zast.txt","r");
char ch;
while (!feof(f))
{ fscanf(f,"%c",&ch);
printf("%c",ch); }
fclose(f); }
Файл «newfile»
void form_t(int n, float *t,float dt);
 
void form_Uvx(int n,float *t,float *Uvx);
 
void form_Uvix(int n, float *Uvx,float *Uvix);
 
void form_tabl(int n,float*t,float*Uvx,float*Uvix);
 
float time_max(int n, float *Uvx, float *t);
 
void write_file(int n,float *t,float *Uvx,float *Uvix);
 
void read_file();
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 13:22     Затруднения в программе
Посмотрите здесь:

switch есть небольшие затруднения C++
C++ Затруднения с итерацией и подсчетом количеста функций
C++ Вопрос по программе.
Ошибки в программе C++
C++ 1 ошибка в программе
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
26.05.2012, 13:49     Затруднения в программе #2
Цитата Сообщение от akainia Посмотреть сообщение
возможно ли заменить тип функции float на void и что при этом изменится...
Всё же тип возвращаемого результата, а не функции.
Ну а если заменить прямо float на void то изменится при этом то что функция перестанет возвращать результат.
Может преподаватель хотел получать указатель на void, так тоже можно.
Для этого можете выделить память под новую переменную типа double, туда засунуть своё значение какое надо и возвращать потом этот указатель (к типу void* он и сам приведётся или же можете явно указать приведение типа при возврате результата). Там где используется результат функции нужно уже будет явно приводить тип к double чтобы узнать результат.
Вообще всё это работать будет подобно выделению памяти malloc'ом и должно быть вам знакомо.
akainia
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 11
26.05.2012, 14:11  [ТС]     Затруднения в программе #3
Цитата Сообщение от Gepar Посмотреть сообщение
Всё же тип возвращаемого результата, а не функции.
Ну а если заменить прямо float на void то изменится при этом то что функция перестанет возвращать результат.
Может преподаватель хотел получать указатель на void, так тоже можно.
Для этого можете выделить память под новую переменную типа double, туда засунуть своё значение какое надо и возвращать потом этот указатель (к типу void* он и сам приведётся или же можете явно указать приведение типа при возврате результата). Там где используется результат функции нужно уже будет явно приводить тип к double чтобы узнать результат.
Вообще всё это работать будет подобно выделению памяти malloc'ом и должно быть вам знакомо.
Не поняла я, что вы сказали...
Одногрупники, подсказали, что должно быть так:

void time_max(int n, float *Uvx, float &t)
{ float max=*Uvx;
for (int i=0;i<n;i++)
if (Uvx[i]>max) max=Uvx[i];
for (int i=0;i<n;i++)
if(Uvx[i]==max);}
но у меня здесь про t, ничего не сказано
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
27.05.2012, 00:08     Затруднения в программе #4

Не по теме:

Цитата Сообщение от akainia Посмотреть сообщение
Не поняла я, что вы сказали...
Наверное потому не поняли и что преподаватель попросил


К сожалению мне больше нечего добавить, я уже написал о том что изменится если написать void, и как поступить если поменять возврат результата функции через void* .
Могу добавить что можно сделать функцию void, а возвращать результат через один из параметров функции.
Например добавить в список принимаемых параметров функции некий floar* res и через него возвращать результат.
akainia
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 11
27.05.2012, 00:13  [ТС]     Затруднения в программе #5
Цитата Сообщение от Gepar Посмотреть сообщение

Не по теме:


Наверное потому не поняли и что преподаватель попросил


К сожалению мне больше нечего добавить, я уже написал о том что изменится если написать void, и как поступить если поменять возврат результата функции через void* .
Могу добавить что можно сделать функцию void, а возвращать результат через один из параметров функции.
Например добавить в список принимаемых параметров функции некий floar* res и через него возвращать результат.
Я вас правильно поняла? можно сделать так?
void time_max(int n, float *Uvx, float *t,float *max)
{ *max=0;
for (int i=0;i<n;i++)
if (Uvx[i]>max) *max=Uvx[i];
}

int main()
{
float max;
time_max(n,Uvx,t,&max);
}
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
27.05.2012, 00:30     Затруднения в программе #6
akainia, ну да. Только не забывайте память выделять
C++
1
2
3
4
5
if (Uvx[i]>max) 
{ 
*max=new float;
*max=Uvx[i];
}
Добавлено через 3 минуты
В начале кстати тоже адрес обнуляйте, а не саму переменную, так что вместо
C++
1
*max=0;
надо писать
C++
1
max=0;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2012, 00:55     Затруднения в программе
Еще ссылки по теме:

Затруднения с Wise Installer"ом C++
C++ Ошибка в программе
C++ Ошибки в программе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
akainia
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 11
27.05.2012, 00:55  [ТС]     Затруднения в программе #7
Цитата Сообщение от Gepar Посмотреть сообщение
akainia, ну да. Только не забывайте память выделять
C++
1
2
3
4
5
if (Uvx[i]>max) 
{ 
*max=new float;
*max=Uvx[i];
}
Добавлено через 3 минуты
В начале кстати тоже адрес обнуляйте, а не саму переменную, так что вместо
C++
1
*max=0;
надо писать
C++
1
max=0;
Исправила, но все равно не работает... Можете у себя прогнать программу? Выдает ошибку:
main.cpp:36:28: error: void value not ignored as it ought to be
Yandex
Объявления
27.05.2012, 00:55     Затруднения в программе
Ответ Создать тему
Опции темы

Текущее время: 19:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru