Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамические массивы С ++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
ЛоРД¤ОЛЕДЖАН
Нужно решить простинькую задачку о массивах
вычислить массив Z=sgrt(1+X) где X - положительные корни уравнения Ах+Вcos£, при А=0.75,
£=-1.5+i*h£,
i=0,n,
h£=0.5,
n=10
Account
А где твое решение?)
И если проблема какая, то где вопрос?

Я не думаю что здесь кто то будет решать твою задачу за тебя)
ЛоРД¤ОЛЕДЖАН
Как я могу написать мой свой вариант решения если С++ я начну учить только в сентебре а летнюю практику нужно написать на этом языке. :-(
volvo
blink.gif Как же ты будешь сдавать решение на языке, который еще не начинал учить?
ЛоРД¤ОЛЕДЖАН
Цитата(volvo @ 21.07.2009 21:20) *

blink.gif Как же ты будешь сдавать решение на языке, который еще не начинал учить?

мне сказали что прога должна быть на С++ а на первом курсе мы учили только Паскаль, вот я и прошу вас о помощи
Account
а B чему равно перед косинусом ?

Вот что накидал

#include <vector>
#include <iostream>
#include <math.h>

using namespace std;

int main()
{ vector <double> z;
double x,a=0.75,b=0.5/*Здесь значение B*/; int n=10;
system("cls");
for(int i=0;i<=n;i++)
{
x=-(b*cos(-1.5+(i*0.5)))/a; //нахождение корня
if (x>0) z.push_back(sqrt(1+x));//проверка корня и если что
} // вычисление очередного э-та вектора Z
for(int i=0;i<z.size();i++)
cout<<"Z["<<i+1<<"]= "<<z[i]<<endl; //вывод содержимого вектора Z
getchar();
cout<<"Bay! Bay! \n";
return 0;
}


Но здесь вектор так сказать не опустошается, что наверное не есть гуд...
volvo
Account
Во-первых, будет Warning, потому что размер vector-а - это unsigned int, а не просто int... Не надо смешивать знаковые и беззнаковые типы.

А во-вторых - не надо "освобождать" вектор. Сам удалится, как только выйдет из области видимости.

А вообще, скорее всего, речь шла не об STL. А о "ручном" выделении памяти через new. Они ж даже не начали изучать язык пока...
Account
Цитата(volvo @ 22.07.2009 1:53) *

Account
Во-первых, будет Warning, потому что размер vector-а - это unsigned int, а не просто int... Не надо смешивать знаковые и беззнаковые типы.



А поконкретней можно пожалуйста, чтоб взять на заметку в будущем.

У меня вроде не показывает предупреждений, вот скрин
volvo
Включи ВСЕ Warning-и: Project -> Build options -> скрин...

Нажмите для просмотра прикрепленного файла
Результат компиляции видно там же.
Account
Включил, только в настройках, чтоб во всех проектах показывались все варнинги))

Тогда можно решить эту проблему во так
for(unsigned int i=0;i<z.size();i++)



ЛоРД¤ОЛЕДЖАН
Вы спрашивали чему ровно В в условии ничего нету значит вводится с клавиатуры. И писать наверно нужно через nеw (хотя я не знаю что это) так как по ходу прога не должна быть сложной, на подготовления был только месяц за это время врятли много выучиш
Account
Вот переделал под new, и B вводится, но мне кажется что у этой переменной тоже наверное какоето ограничение должно быть...
#include <vector>
#include <iostream>
#include <math.h>

using namespace std;

int main()
{ double* z;
double x,a=0.75,b; int n=10,j=0;
system("cls");
cout<<"Vvedite B: ";
(cin>>b).get();
z = new double [n+1];
for(int i=0;i<=n;i++)
{
x=-(b*cos(-1.5+(i*0.5)))/a; //нахождение корня
if (x>0) {z[j]=sqrt(1+x);j++;}//проверка корня и если что
} // вычисление очередного э-та массива Z
for(int i=0;i<j;i++)
cout<<"Z["<<i<<"]= "<<z[i]<<endl; //вывод содержимого массива Z
getchar();
delete [] z ;

cout<<"Bay! Bay! \n";

return 0;
}


Хотел сделать выделение только под нужное количество положительных только корней, но это тогда приходится высчитывать их колличество, т.е. предворительно находить корень, а после выделения опять высчитывать для присвоения, как сделать это все вместе одновременно пока не додумался, может volvo подскажет более оптимальный вариант
volvo
Цитата
более оптимальный вариант
Написать в С-шном стиле, через realloc. Пример - здесь: http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

Я, если честно, до сих пор не совсем понимаю смысла задания. Написать летом на С++, но учить мы его будем только осенью. Это такая завуалированная форма стёба? Учим за лето язык сами? Смысл-то какой в написании программы? Человек же объяснить не сможет ни одной строки. Тем более, если сделать вот так:
    for(int i=0;i<=n;i++) {
if ((x=-(b*cos(-1.5+(i*0.5)))/a)>0) z[j++]=sqrt(1+x); // вычисление и проверка корня и если что
} // вычисление очередного э-а вектора Z

P.S. <vector> убери из программы, не нужен он...
Account
ок убрал <vector> и подправил вычисления условия


#include <iostream>
#include <math.h>

using namespace std;

int main()
{ double* z;
double x,a=0.75,b; int n=10,j=0;
system("cls");
cout<<"Vvedite B: ";
(cin>>b).get();
z = new double [n+1];
for(int i=0;i<=n;i++)
if ((x=-(b*cos(-1.5+(i*0.5)))/a)>0) {z[j]=sqrt(1+x);j++;}//вычисление и проверка корня и если что
// вычисление очередного э-та массива Z

for(int i=0;i<j;i++)
cout<<"Z["<<i<<"]= "<<z[i]<<endl; //вывод содержимого массива Z
getchar();
delete [] z ;

cout<<"Bay! Bay! \n";

return 0;
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.