Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
akainia
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 11
#1

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

26.05.2012, 13:22. Просмотров 370. Ответов 6
Метки нет (Все метки)

Здравствуйте. Когда писала программу столкнулась с вот таким вопросом от преподавателя:

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();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2012, 13:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Затруднения в программе (C++):

Затруднения с выводом системного времени в программе - C++
Здравствуйте! Подскажите пожалуйста, как исправить ошибку. У меня две формы. Первая - примитивная авторизация по ключу, вторая...

затруднения с ShowMessage - C++
Есть два поля ввода, в каждое из них должно вводится не пустое значение, иначе должна быть проверка ввода значений. Написал бодро первую...

Затруднения с циклом do-while - C++
Здравствуйте! Дано задание: Используя оператор цикла do-While, составить программу, которая вычисляет сумму уравнения , при этом х...

Затруднения по динамическим переменным - C++
Всем привет! Когда создаю динамическую переменную, то чтобы вывести ее значение, то пишу *переменная. Если выделяю массив, то обращаюсь...

Затруднения с ответом по теоретической части - C++
Здравствуйте! К вам вопрос по теоретической части, на который есть предпосылки в интернете, но ответа сформулированного нет. Цикл while в ...

Затруднения с Wise Installer"ом - C++
Постоянно возникает одна и таже ошибка прои компиляции просто при пробном запуске или сохранении в Wise for Windows Installer 3.0,...

6
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
26.05.2012, 13:49 #2
Цитата Сообщение от akainia Посмотреть сообщение
возможно ли заменить тип функции float на void и что при этом изменится...
Всё же тип возвращаемого результата, а не функции.
Ну а если заменить прямо float на void то изменится при этом то что функция перестанет возвращать результат.
Может преподаватель хотел получать указатель на void, так тоже можно.
Для этого можете выделить память под новую переменную типа double, туда засунуть своё значение какое надо и возвращать потом этот указатель (к типу void* он и сам приведётся или же можете явно указать приведение типа при возврате результата). Там где используется результат функции нужно уже будет явно приводить тип к double чтобы узнать результат.
Вообще всё это работать будет подобно выделению памяти malloc'ом и должно быть вам знакомо.
1
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, ничего не сказано
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
27.05.2012, 00:08 #4

Не по теме:

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


К сожалению мне больше нечего добавить, я уже написал о том что изменится если написать void, и как поступить если поменять возврат результата функции через void* .
Могу добавить что можно сделать функцию void, а возвращать результат через один из параметров функции.
Например добавить в список принимаемых параметров функции некий floar* res и через него возвращать результат.
1
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);
}
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
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;
1
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
0
27.05.2012, 00:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2012, 00:55
Привет! Вот еще темы с ответами:

switch есть небольшие затруднения - C++
Есть программа #include &lt;windows.h&gt; #include &lt;iostream.h&gt; int main() { char *ch; cout&lt;&lt;&quot;Enter ab,asd,voro or...

Затруднения с одномерным массивом( максимальное значение) - C++
Здравствуйте! Нужно составить программу, которая вводит 10 целых элементов одномерного массива, находит максимальных элемент и выводит...

Затруднения с итерацией и подсчетом количеста функций - C++
Подскажите, что не так делаю #include &lt;iostream&gt; #include &lt;conio.h&gt; //для _getch() #include &lt;math.h&gt; //для pow(), sqrt() ...

Затруднения в составлении программы с условными операторами - C++
Здраствуйте! Нужна помощь в составлении программы согласно инструкции. Дело выглядит так, дано две взаимосвязанные уравнений. Первую(...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru