|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - помогите написать программу на C++ |
|
|
C/C++ - помогите написать программу на C++
|
Новый участник Сообщения: 15 |
Профиль | Отправить PM | Цитировать
помогите пожалуйста решить задачку, очень нужно((((((
я понял, что задачу нужно решать как массив, но тут я столкнулся с проблемой, поскольку очень сложна для меня, очень много условий в этой задачке сам размер матрицы (количество строк и столбцов) не задан, но имеет ограничения как по X так и по Y. Но они как-то связаны, к примеру если взять что ∆X = 1 и ∆Y = 1, то кол-во строк = 11, а кол-во столбцов = 9, а может быть и наоборот (они могут и отличаться, к примеру ∆X = 0,01 и ∆Y = 0,01); даже сами значения ∆X и ∆Y могут отличаться друг от друга, но они связаны с границами Xϵ[0;8] и Yϵ[0;10]. а вот и вторая проблема в этой же задаче: • к примеру, как показано на рисунке значение в массиве при X = 0, а Y =10 будет = 0, затем при изменяющемся X и постоянном Y значение будет расти и в точке массива при X = 6, а Y =10 значение будет = 10, а далее будет падать до 0 в точке матрицы X = 8 и Y =10; • также, как видно из рисунка значения в массиве при X = 0, а Y изменяющемся в диапазоне [0;2] будет = 5; • все остальные граничные значения = 0. И третья проблема: это расчет внутренних значений матрицы Если ∆X = ∆Y, то внутренние значения каждой точки матрицы рассчитываются по формуле U[i][j]=(U[i-1][j]+ U[i+1][j]+ U[i][j-1]+ U[i][j+1])/4 Если ∆X ≠ ∆Y, то внутренние значения каждой точки матрицы рассчитываются по формуле U[i][j]=(U[i-1][j]+ U[i+1][j]+ ((∆X²/∆Y²)*(U[i][j-1]+ U[i][j+1])))/(2*(1+(∆X²/∆Y²))) |
|
Отправлено: 16:34, 06-04-2011 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать feytan, ааа а что спросить то хотел? Условий много, а их цель и смысл не ясны. В чем возникла проблема? Что ты не знаешь "Как сделать?"?
Описав проблему, ты не задал ни одного вопроса, поэтому помочь тебе пока сложно. |
------- Отправлено: 16:59, 06-04-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать ты бы для начала сам понял что от тебя хотят в этой задаче а не у нас спрашивал.. это не мы тебе задали эту задачу. чесно.
тебе правильно говорят - задай вопрос. он состоит обычно из нескольких частей: 1. условие, т.е. то что имеется, 2. желаемый ответ, т.е. то что предполагается сделать и получить., и 3. фраза - "вот я тут набросал [ссылка_на_наброски], но не пойму как сделать [непонятная_штука]" . |
Отправлено: 17:46, 06-04-2011 | #3 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Я вроде сделал первую часть программы, проверьте правильно ли (у меня запускается, но все равно прошу проверьте, мож я слишком громозко сделал). В ней я взял просто случайные числы для матрицы, поэтому код нужно будет переделать слегка, но как сделать два других пункта я не знаю. Потому и прошу о помощи.
#include <iostream> #include<time.h> using namespace std; int main () { srand (time(NULL)); float h, k; int a, b, n, m, i, j; cout<<"Enter a: "; //a - конечное значение на графике по оси Y cin>>a; cout<<"\nEnter h: "; //h - расстояние одной строки по оси Y cin>>h; n=(int)(a/h)+1; //расчитываем количество строк в массиве cout<<"\n n="<<n; //n - количество строк в массиве cout<<"\nEnter b: "; //b - конечное значение на графике по оси X cin>>b; cout<<"\nEnter k: "; //k - расстояние одного столбца по оси X cin>>k; m=(int)(b/k)+1; //расчитываем количество столбцов в массиве cout<<"\n m="<<m; //m - количество столбцов в массиве int** U = NULL; /* Выделяем память под матрицу */ /* Выделяем память под массив строк матрицы */ U = new int*[n]; /* Выделяем память под каждую строку матрицы */ for(i = 0; i < n; ++i) U[i] = new int[m]; //заполнение матрицы for (i = 0; i < n; ++i) { for (j = 0; j < m; ++j) { U[i][j]=rand()%20; cout<<U[i][j]<<"\t"; } cout<<endl; } /* Удаление матрицы */ /* Удаление каждой строки матрицы */ for(i = 0; i < n; ++i) delete[] U[i]; /* Удаление массива строк матрицы */ delete[] U; system("pause"); return 0; } |
Отправлено: 13:31, 16-04-2011 | #4 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Задачу я решил. Я изменил код программы, взяв за основу, что ∆X = 1 и ∆Y = 1, т.о. кол-во строк = 11, а кол-во столбцов = 9. Вот код программы:
#include <iostream> using namespace std; int main () { int i, j, n1, m1,k; float e=0.000001, max_pogr, d1, d2, next; int const n=11; //задаем количество строк в массиве int const m=9; //задаем количество столбцов в массиве float mas_U[n][m]; d1=10.0/6.0; d2=5.0; n1=n-1; m1=m-1; cout<<"===Zadanie nulei===" << endl; cout<<"\n"; for(i = 0; i < n; i ++) { for(j = 0; j < m; j ++) { mas_U[i][j] = 0; } } for(i = 0; i < n; i ++) { for(j = 0; j < m; j ++) { cout << mas_U[i][j] << "\t"; } cout << endl; } cout<<"\n===Pervie granichnie usloviya===" << endl; cout<<"\n"; for(i = 8; i < n; i++) { mas_U[i][0]=5; } for(i = 0; i < n; i ++) { for(j = 0; j < m; j ++) { cout << mas_U[i][j] << "\t"; } cout << endl; } cout<<"\n===Vtorie granichnie usloviya===" << endl; cout<<"\n"; for(j = 1; j <= 7; j ++) { mas_U[0][j] = mas_U[0][j-1] + d1; } for(j = 7; j < m ; j ++) { mas_U[0][j] = mas_U[0][j-1] - d2; } for(i = 0; i < n; i ++) { for(j = 0; j < m; j ++) { cout << mas_U[i][j] << "\t"; } cout << endl; } cout<<"\n===Podschet massiva===" << endl; cout<<"\n"; for(k=0;;k++) { max_pogr=0; for(i = 1; i < n1; i ++) { for(j = 1; j < m1; j ++) { next = (mas_U[i+1][j] + mas_U[i-1][j] + mas_U[i][j+1] + mas_U[i][j-1])/4; if((mas_U[i][j] - next) > max_pogr) max_pogr=(mas_U[i][j] - next); else mas_U[i][j] = next; } } if(max_pogr<=e||k>=10000)break; } for(i = 0; i < n; i ++) { for(j = 0; j < m; j ++) printf("%7.4f\t",mas_U[i][j]); printf("\n\n"); } system("pause"); return 0; } |
|
Отправлено: 16:22, 07-06-2011 | #5 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Помогите написать программу.
|
Отправлено: 19:24, 25-09-2011 | #6 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Студенты... ммм я по ним скучал :)
Tanya_93, Выпиши пожалуйста Определения переменных - т.е. имя переменной, ее тип (логическая, вещественная, целая и т.п.) и, если надо, размерность. Формулы вычисления на каждом участке Ответь, как переменной присвоить значение введенное с клавиатуры, как вывести значение на экран. Привели конструкцию цикла for или цикла while. Не связывая эти блоки с собой. Мне просто нужны "кирпичики" - ответы на заданные вопросы, даже если тебе не видна полная картина, ничего страшного, все равно ответь, дальше я покажу, как все это удобно между собой складывается и получается решение задачи. |
------- Отправлено: 21:19, 25-09-2011 | #7 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать #include <stdio.h>
#include <iostream> #include <conio.h> using namespace std; void main() { double a,b,c,x,x1,x2,d; cout<< "vvesti a: \n"; cin>> a; cout <<"vvesti b: \n"; cin>> b; cout <<"vvesti c: \n"; cin>>c; cout <<"vvesti x1: \n"; cin>>x1; cout <<"vvesti x2: \n"; cin>>x2; cout <<"vvesti d: \n"; cin>>d; cout<<" -------------------------- \n"; cout<<"| X |"; cout<<" F |"; for(x=x1;x<x2) { if ((x<0)&&(b!=0)) {printf("\n| %10.1lf ",x); printf("| %10.1lf |",a*x*x*x+b*x*x); } else if ((x>0)&&(b==0)) {printf ("\n| %10.1lf ",x); printf ("| %10.1lf |",(x-a)/(x-c)); } else {printf ("\n| %10.1lf ",x); printf ("| %10.1lf |",(x+5.0)/c*(x-10.0)); } printf("\n -------------------------- "); } getch(); } |
Отправлено: 22:47, 25-09-2011 | #8 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Tanya_93, Первый и самый злой комментарий : "Комментарии !"
Расставляй комментарии к коду, даже к такому простейшему. Цитата Tanya_93:
Цитата Tanya_93:
Цитата Tanya_93:
Ведь в задании, насколько я помню, был указан шаг dX, в существующем варианте шаг будет равен единице. Т.е. тебе либо надо выправлять условия цикла for, либо использовать цикл while. |
|||
------- Отправлено: 09:27, 26-09-2011 | #9 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать да я for подправила,
|
Отправлено: 18:31, 26-09-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Помогите написать программу! Turbo Pascal 7.0 | MeeF | Тест-форум | 2 | 08-12-2011 01:02 | |
Разное - [Pascal] помогите написать программу | rom6520 | Программирование и базы данных | 6 | 22-01-2011 19:54 | |
Разное - Pascal помогите пожалуйста написать программу | Azamt | Программирование и базы данных | 1 | 21-01-2011 17:49 | |
C/C++ - Помогите пожалуста. Нужно написать программу на С. | Oganes | Программирование и базы данных | 1 | 20-12-2010 12:29 | |
C/C++ - Помогите написать программу на С++ | rivz2007 | Программирование и базы данных | 4 | 05-09-2010 16:54 |
|