PDA

Просмотр полной версии : Вопросы по С++



KLINED
29.10.2005, 12:15
Помогите проинициализировать массив. Дан одномерный массив:
const int n=37;
double u[n];
Его нужно проинициализировать 37-ю элементами, которые лежат в множестве 0<=x<=36 c шагом 10 и где n-ый элемент массива будет равен: Xn*57.295779.

Slipper
29.10.2005, 13:32
Помогите проинициализировать массив. Дан одномерный массив:
const int n=37;
double u[n];
Его нужно проинициализировать 37-ю элементами, которые лежат в множестве 0<=x<=36 c шагом 10 и где n-ый элемент массива будет равен: Xn*57.295779.
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>

main(){
int j,k;
const int n=37;
double u[n];
randomize();
for (j=0;j<=n-1;j++)
u[j]=random(37);
u[n-1]*=57.295779;
for (k=0;k<=n-1;k++)
printf(" %f",u[k]);
getch();
}

KLINED
29.10.2005, 14:16
!!!!может шаг=1?
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>

main(){
int j,k;
const int n=37;
double u[n];
randomize();
for (int j=0;j<n-1;j++)
u[j]=random(37)*.1;//чтоб числа были десятичные
u[n-1]=57.295779;
for (int k=0;k<=n-1;k++)
cout<<u[k]<<" ";
getch();
}
Нет, шаг 10-ть, элементы должны быть расположены так: 0*57.295779 , 10*57.295779 , 20*57.295779 , … , 360*57.295779. Т.е получаем разбиение окружности по 10 градусов и переведённое в радианы.
Теперь насчёт твоего варианта: зачем делать глобальное объявление переменных внутри функции, если ты объявляешь их в цикле? Надо оставить что-то одно, напр. глобальное объявление. :)
И в конечном итоге результат всё равно ошибочный выводиться.

Slipper
29.10.2005, 14:22
набивал быстро вот и не парился особо, а так:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>

main(){
int j,k;
const int n=37;
double u[n];
for (j=0;j<=n-1;j++)
u[j]=j*10*57.295779;

for (k=0;k<=n-1;k++)
printf(" %f",u[k]);
getch();
}

KLINED
14.12.2006, 19:30
Новый вопрос. Есть две функции, одна возвращает определенное значение в другой вызывается первая и потом используется возвращаемое значение в теле функции. Так вот, на этот возвращаемый аргумент из первой функции ругается компилятор. Его что нужно объявлять в круглых скобках (…)? Хотя вроде бы это ошибочно, да и внутри второй функции его объявление тоже ничего не даст…
double f1() {return FI;} и вторая double f2(){double f1(); …=…FI;}

Palmer
14.12.2006, 20:05
Где инициализация переменной FI в функции f1()? Что по твоему должна вернуть функция?
P.S.:А ещё желательно писать ошибку выдаваемую компилятором.

KLINED
14.12.2006, 20:10
Где инициализация переменной FI в функции f1()? Что по твоему должна вернуть функция?Да FI проинициализирована в первой функции. Не в этом вопрос, я упрощаю задачу, что бы не обсуждать какие-то побочные вещи…

Palmer
14.12.2006, 20:51
"Упрощать сложно". В данном случае ты только усложнил задачу. Где полный код и ошибка компилятора?

Novosel2000
14.12.2006, 21:02
double f1() {return FI;} и вторая double f2(){double f1(); …=…FI;}

Ты во второй функции определил переменную через пурвую функцию?

Чес говоря с программигном я давно не сталкивался, но чес слово не понятно - где ошибка...
см. Palmer' а

KLINED
14.12.2006, 21:21
//---------------------------------------------------------------------------
double gen(){
double FI_grad;
double FI_rad;
randomize();
FI_grad=random(361);
FI_rad=FI_grad*0.0174;
return FI_rad;
}
//---------------------------------------------------------------------------
double method(){
double xk1=-2.0;
double xk2=6.0;
double H=1.0;
double x1;
double x2;
for ( ;; ){
double gen();
x1=xk1+H*cos(FI_rad); <- тут ругаеться на неопознание FI_rad
xk1=x1;
x2=xk2+H*sin(FI_rad);
xk2=x2;
cout<<x1;
cout<<x2;
}
}

Novosel2000
14.12.2006, 21:31
А попробуй
...
double FI_rad;
FI_rad=gen();
...

KLINED
14.12.2006, 21:37
А попробуй
...
double FI_rad;
FI_rad=gen();
...
Подозреваю, что такое прокатит, но это не то что нужно. Так FI_rad будет создаваться в method() но не будет иметь никакого отношения к gen()

Novosel2000
14.12.2006, 21:42
В mehtod() будет выделена ячейка памяти под именем FI_rad и в нее будет помещено значени, которое будет вычесленов gen()

KLINED
14.12.2006, 21:46
В mehtod() будет выделена ячейка памяти под именем FI_rad и в нее будет помещено значени, которое будет вычесленов gen()Компиляторы не ругаются, но cout тоже не работает. А что если FI_rad глобально объявить?

Novosel2000
14.12.2006, 22:01
Могешь объявить глобально, при этом возвращать из gen() ничего не надо.

А при чем тут cout?

KLINED
14.12.2006, 22:11
Могешь объявить глобально, при этом возвращать из gen() ничего не надо.

А при чем тут cout?
Спасибо за помощь. А cout я к тому, что результат, я все равно не считал. Но это уже офтопик.

Elg
15.12.2006, 16:20
И у меня вопросик по Си...
Что не правильно?

#include <stdio.h>
main()
{
int k,i,n;
float y[10],x[10];
float h, S,a,b;
printf("введите интервал [a,b]\n");
scanf("%d%d",&a,&b);
n=10;
k=4;
h=(b-a)/n;
for (i=0; i<=n;i++)
{
x[i]=a+i*h;
y[i]=x[i]*x[i];
};

S=y[0]-y[n];
for (i=1; i<=n;i++)
{
S=S+k*y[i];
k=6-k;
};
S=S*h/3;
printf("Интеграл равен ",S);
}

KLINED
15.12.2006, 16:43
Для for ( ) после { } ; не ставиться вроде. . Компилятор должен выдавать ошибку на наличие лишних ;

Elg
15.12.2006, 17:18
нет, здесь все правильно. компилятор ошибок не выдает. программа просто не считает. :(

KLINED
15.12.2006, 17:33
Я в саму задачу не вникаю, смотрю по коду.

S=S+k*y[i] Вот это, довольно таки интересный момент. Если y этой i-ый вектор, т.е вектор размерности i. То результат S никак не может быть числовой константой. Должно быть нечто вроде S[i], как то так. Потому что при действиях ( +, -, *, = ) с матрицами/векторами, результат всегда вектор/матрица.

И тут же. k типа int, а S типа float. Не совпадение типов данных, надо приведение типов писать. Или все делать одним типом float кроме i. Хотя для математики, тип float плох у него точность 3-и или 2-а знака после запятой, лучше double использовать.

Elg
15.12.2006, 17:50
Почему? S – это сумма. Поочередно прибавляем к ней разные значения у. Я, по крайне мере, это так читаю. :sm_cry:

KLINED
15.12.2006, 17:58
Почему? S – это сумма. Поочередно прибавляем к ней разные значения у. Я, по крайне мере, это так читаю. :sm_cry:
А может быть и так, действительно. Я в задание не вникаю, смотрю что написано. :)
Я переделал, код по-своему. Вроде площадь считается..., и не отрицательная и разная при разных приделах.
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main()
{
int i;
int n=10;

double k=4.0;
double y[10],x[10];
double h, S,a,b;

cout<<"Enter [a,b]:\n";
cin>>a>>b;


h=(b-a)/n;
for (i=0; i<=n;i++)
{
x[i]=a+i*h;
y[i]=x[i]*x[i];
}

S=y[0]-y[n];
for (i=1; i<=n;i++)
{
S=S+k*y[i];
k=6-k;
}
S=S*h/3;
cout<<"S:"<<S<<endl;;
getch();
}

Novosel2000
15.12.2006, 19:26
нет, здесь все правильно. компилятор ошибок не выдает. программа просто не считает. :(


Что есть "не считает"?
Трейс делал?

Innaya
25.01.2007, 01:02
И у меня вопросик по Си...
Что не правильно?

#include <stdio.h>
main()
А здесь не все бибилотеки подключены, вот и не идёт программка :)