Показать полную графическую версию : [решено] Помогите решить задачу по С++
Страниц :
1
2
3
4
5
6
7
8
9
10
11
12
[
13]
14
15
16
Ну вы братцы кролики и жукиии!!!)))
Ладно, вот я тут попробывал кое что, но чует мое сердце, что белиберда какая то все это. Скажите следующий код работоспостобен, и показывает ли то что я ищу или же это бред собачий я написал?:
TFormSosred *FormSosred;
float K,T,tau;
const Amax = 30;
float w[Amax];
float K0,K1;
//---------------------------------------------------------------------------
__fastcall TFormSosred::TFormSosred(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormSosred::ButtonExeClick(TObject *Sender)
{
try
{
K=Edit1->Text.ToFloat();
T=Edit2->Text.ToFloat();
tau=Edit3->Text.ToFloat();
}
catch(EConvertError&)
{
}
for (float w=0; w<=30; w++)
{
w=w*0.05;
K0=(w*sin(tau*w)+T*w*w*cos(tau*w))/K;
K1=(T*w*sin(tau*w)-cos(tau*w))/K;
Series1->AddXY(K0,K1);
}
грек, Вопрос на засыпку. А ты от чего синус получаешь? В чем измеряется угол? »
Это ключевой вопрос. Как смысла задания, так и написания алгоритма.
#include <math.h> - ты это имеешь в виду или что?
или это - cos(tau*w),sin(tau*w)???
tau,w - это числа, например 2, 1.5, 0.05
грек, я спрашиваю прямым текстом. В чем измеряется угол? Какие у него единицы измерения? Стаканы, стулья, штуки, что именно означают эти числа? Что тут не понятного?!
Братцыыы!!!)))) выхооодит!!! строиться график!!!!))))) теперь до ума буду доводить, а то все равно че-то он так себе пока что
Titanium
17-05-2011, 20:09
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
const double PI = 3.1415926;
main ()
{
double x1, y1, x2, y2, x3, y3;
double a, b , c, u1, u2, u3;
cout << "Ââåäèòå êîîðäèíàòû âåðøèí: \n" ;
cout << "x1: "; cin >> x1;
cout << "y1: "; cin >> y1;
cout << "x2: "; cin >> y1;
cout << "y2: "; cin >> y2;
cout << "x3: "; cin >> x3;
cout << "y3: "; cin >> y3;
a = sqrt( pow(x1-x2,2) + pow(y1-y2,2) );
c = sqrt( pow(x2-x3,2) + pow(y2-y3,2) );
b = sqrt( pow(x1-x3,2) + pow(y1-y3,2) );
if (a+b>c && b+c>a && a+c>b)
{
double p = (a+b+c)/2;
double s = sqrt(p*(p-a)* (p-b)*(p-c));
u1 = asin(2*s / (a*b)) * 180 / PI;
u2 = asin(2*s / (b*c)) * 180 / PI;
u3 = asin(2*s / (a*c)) * 180 / PI;
cout << "Óãëû òðåóãîëüíèêà: " << u1 << ", " << u2 << ", " << u3 << "\n";
}
else cout << "Òðåóãîëüíèê âûðîæäåí!\n";
return 0;
}
Какую еще можно формулу применить для нахождения внутренних углов треугольника АВС (препод сказал что мои формулы неправильны)
Как новичек - привыкай правильно оформлять пост.
Код обрамляется тегом или #.
a = sqrt( pow(x1-x2,2) + pow(y1-y2,2) );
Это получение стороны a? треугольника ABC?
Да, формула не верна, проверяй правильность расставленных скобок.
Формула нахождения углов вообще не понятна.
Что делать и как исправлять?
Все просто. Берем Марка нашего уважаемого Яковлевича Выгодского (http://rapidshare.com/files/37301673/Vygodskij_M.J._Spravochnik_po_jelementarnoj_matematike.rar) Справочник по элементарной математике, ищем §22 Основные соотношения между элементами треугольника. (по приведенной ссылке стр 367-367 текста и стр 341-343 djvu файла) и внимательно смотрим и применяем формулы расчета требуемых величин.
Так же не забываем пересчитывать радианы в градусы и обратно.
Titanium
17-05-2011, 21:50
Понятно, спасибо. Посмотрите, пожалуйста, что не так в этом коде.
#include <iostream.h>
#include <math.h>
float a,a1,v0,b,x,g;
int n;
main ()
{
cout <<"Ââåäèòå g:"; cin >> g;
cout <<"Ââåäèòå v0:";cin >> v0;
cout <<"Ââåäèòå a:"; cin >> a;
cout <<"Ââåäèòå b:"; cin >> b;
cout <<"Ââåäèòå n:"; cin >> n;
a1 = ((v0*v0)/(g*b))*sin(2*a);
cout << "Ðåçóëüòàò = \n";
for(int i=1; i<=n; i++)
{
cout << "x" << " = " << a1*(1-pow(1/b,i))/(1-1/b) << "\n";
}
return 0;
}
тут нужно найти абсциссы первых точек касания
Titanium, перепиши пожалуйста с использованием транслита. Если в прошлый раз абракатабра была понятна из условий задачи - то эта нет. (
Или в редакторе поправь - "Введите g", "Ведите v0" ... "Результат ="
Что должно было получиться?
sin(2*a) »
точно в радианах, а не в градусах?
Titanium
17-05-2011, 22:09
#include <iostream.h>
#include <conio.h>
#include <math.h>
float v0;g;
float a,a1;
float b;
int n;
float x;
main()
{cout <<"wwedite g"; cin >> g;
cout << "Wwedite v0: "; cin >> v0;
cout << "Wwedite a: "; cin >> a;
cout << "Wwedite b: "; cin >> b;
cout << "Wwedite n: "; cin >> n;
a1 = ((v0*v0)/(g*b))*sin(2*a);
cout << "Result: \n";
for(int i=1; i<=n; i++)
{
cout << "x[" << i << "] = " << a1*(1-pow(1/b,i))/(1-1/b) << endl;
}
return 0;
}
Отскоки. Материальная точка бросается на горизонтальную под углом а со скоростью v0. При каждом ударе о плоскость кинетическая энергия уменьщается в б раз. Найти абциссы первых точек касания. Сопротивлением воздуха пренебречь
в этом параграфе основные соотношения между элементами треугольника только половинные углы, а мне нужно найти внутренние углы треугольника АВС
Вчера, в частной переписке, задача с треугольником была решена.
Задача с запуском материальной точки на плоскость, обсуждена, поставлены условия, заданы начальные параметры. Задача находится в решении.
За подробностями к Titanium, как к инициализатору и программисту.
В целом же, данные задачи можно "отметить" решенными.
Вот я немного так сказать зациклился....
•определение номера строки (номеров строк), в которой находится самая длинная серия одинаковых элементов.
я немогу "всунуть" условие, когда в нескольких строках одинаковые элементы, и они в то же время, являются максимально долгой последовательностью... вот код программы:
пишу в VS 2010
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <locale>
using namespace std ;
//int Max , Min ;
class qwerty
{
public:
qwerty() ;
qwerty( int , int ) ;
void vivod( int ** mas , int n , int m )
{
wcout << L"\n\nИсходный массив: \n" ;
for ( int i = 0 ; i < m ; i++ )//Вывод массива!!
{
wcout << L"Строка " << i+1 << "\n" ;
for ( int j = 0 ; j < n ; j++ )
{
wcout << mas[i][j] << L"\t" ;
if ( j == n-1 )cout << "\n" ;
}
}
for ( int k = 0 ; k < m ; k++ )
for ( int i = 0 ; i < n-1 ; i++ ) //Упорядочивание по убыванию
{
for ( int j = i+1 ; j < n ; j++ )
{
if ( mas[k][i] < mas[k][j] )
{
int perem ;
perem = mas[k][i] ; mas[k][i] = mas[k][j] ; mas[k][j] = perem ;
}
}
}
wcout << L"\n\nУпорядоченный массив:\n" ;
for ( int i = 0 ; i < m ; i++ )//Вывод массива!!
{
wcout << L"Строка " << i+1 << "\n" ;
for ( int j = 0 ; j < n ; j++ )
{
wcout << mas[i][j] << L"\t" ;
if ( j == n-1 )cout << "\n" ;
}
}
bool sign = 0 ;
for ( int i = 0 ; i < m ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
if ( mas[i][j] == 0 && sign == 0 )
{
wcout << L"Строка " << i+1 << L" содержит нулевой элемент.\n" ;
sign = 1 ;
}
}
}
if ( sign == 0 ) wcout << L"Нулевых элементов не обнаружено!!!\n" ;
int str = 0 , str1=0 , f=0 , b=0 ;
for ( int i = 0 ; i < m ; i++ )//цикл на поиск самой длинной последовательности элементов
{
if ( str <= str1 )
{
for ( int j = 0 ; j < n-1 ; j++ )
if ( mas[i][j] == mas[i][j+1] )
str = str + 1 ; f=i ;
}
else if ( str1 < str )
{
for ( int j = 0 ; j < n-1 ; j++ )
if ( mas[i][j] == mas[i][j+1] )
str1 = str1 + 1 ; b=i ;
}
if ( str <= str1 ) { str = 0 ; f = 0 ; }
else { str1 = 0 ; b = 0 ; }
}
if ( str == 0 && str1 == 0 )wcout << L"Нет повторяющихся элементов!!!\n" ;
if ( str <= str1 ) wcout << L"Самая длинная последовательность в строке № " << b+1 << "\n" ;
if ( str > str1 ) wcout << L"Самая длинная последовательность в строке № " << f+1 << "\n" ;
}
private:
int ** mas ;
// int * mas1 ;
int n ;
// int l ;
int m ;
} ;
/*qwerty::qwerty( int Max , int Min )
{
wcout << L"Введите размерность данного массива : " ; cin >> Razm ;
mas1 = new int[Razm] ;
srand( ( unsigned ) time(NULL)) ;
for ( int i = 0 ; i < Razm ; i++ )
{
mas1[i] = rand( ) % ( Max - Min + 1 ) + Min ;
}
vivod1(mas1) ;
}*/
qwerty :: qwerty()
{
wcout.imbue(locale("rus_rus.866"));
do
{
wcout << L"Введите длинну строк : " ;
cin >> n ;
wcout << L"Введите количество строк : " ;
cin >> m ;
if ( m <= 0 || n <= 0 ) wcout << L"Неверная размерность!!!!!\n" ;
} while ( m <= 0 || n <= 0 ) ;
mas = new int*[m] ;
for(int i=0; i<m; i++) { mas[i]=new int[n]; }
wcout << L"Введите элементы массива : \n" ;
for ( int i = 0 ; i < m ; i++ )
{
for( int j=0 ; j < n ; j++ )
{
wcout <<L"Строка : " << i+1 << L"\nЭлемент " << j+1 << L" из " << n << L" : " ;
cin >> mas[i][j] ;
}
}
vivod( mas , n , m ) ;
}
int _tmain(int argc, _TCHAR* argv[])
{
wcout.imbue(locale("rus_rus.866"));
qwerty a ;
/*wcout << L"\nВведите Max значение для генирации с помощью ГСЧ : " ;
cin >> Max ;
wcout << L"Введите Min значение для генирации с помощью ГСЧ : " ;
cin >> Min ;
qwerty b( Max , Min ) ;*/
return 0;
}
Может, кто знает, или сталкивался с поэлементным вычитанием матриц?(мы не знаем ни разметрность одной матрицы, ни размерность 2-ой)
Buchik, вычитаются равные друг другу матрицы.
Далее любым удобным способом перебираем все элементы матрицы и производим вычитание.
В чем сложность? Что смутило? :dont-know
Уже сделал, просто думал как это реализовать))))Да и забыл как их минусовать друг с другом))) думал на подобии умножения что-то))
VanillaCocaine94
19-06-2011, 14:17
Помогите решить задачу по С++ Borland.
условие:Сформировать матрицу,размером M*N по примеру
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
Написать программу для демонстрации исспользования цыкла с постусловием,выполненую программу записать в файл
VanillaCocaine94
19-06-2011, 14:48
Помогите создать алгоритмы по С++ Borland.
код програм:
№1
#include "stdlib.h"
#include <iostream>
#include <fstream>
#include "conio.h"
void main() {
int const n = 5;
int Mas[n][n], a[n*n];
int i = 1; //Nachinaem zapolnjat' s 1
int x = 0; //S levogo
int y = 0; //verhnego ugla
int dir = -1; //Napravlenie vlevo vniz
fstream filestr;
filestr.open ("massiv.txt", fstream::in);
for (int m=0; m<n*n; m++)
{
filestr >> a[m];
cout<<" "<<a[m];
}
cout<<endl;
filestr.close();
for(i=0; i<n*n; i++){
//Proverka, chto ne vylezli napravo
if (x > n-1){
dir = -dir; //izmenjaem napravlenie
y = y - 2 * dir; //korrektiruem
x = x + dir; //poziciju
}
//Proverka, chto ne vylezli vniz
else if (y > n-1){
dir = -dir; //izmenjaem napravlenie
y = y - dir; //korrektiruem
x = x + 2 * dir; //poziciju
}
//Proverka, chto ne vylezli nalevo
else if (x < 0){
dir = -dir; //izmenjaem napravlenie
x = x + dir; //korrektiruem poziciju
}
//Proverka, chto ne vylezli vverh
else if (y < 0){
dir = -dir; //izmenjaem napravlenie
y = y - dir; //korrektiruem poziciju
}
Mas[x][y] = a[i]; //Zapolnjaem jachejku
x = x + dir; //Perehodim k sledujuwej jachejke
y = y - dir; //v tekuwem napravlenii
}
/* Zamechanie. Proverki peresechenija pravoj i nizhnej granic massiva
dolzhny delat'sja ran'she proverok peresechenija levoj i verhnej
granic. Pochemu - mozhno rassmotret' sluchai popadanija v
pravyj verhnij i v levyj nizhnij ugly. */
//Vyvod soderzhimogo massiva na jekran
for (y = 0; y < n; y++){
//Vyvodim vse jelementy odnoj stroki (po 3 pozicii na chislo)
for (x = 0; x < n; x++)
cout<<Mas[x][y]<<" ";
//Perehodim k sledujuwej stroke
cout<<endl;
}
getch();
}
№2
#include "stdlib.h"
#include <iostream>
#include <fstream>
#include "conio.h"
void main() {
int const n = 5;
int Mas[n][n], a[n*n];
int i = 0; //Nachinaem zapolnjat' s 0
int x = 0; //S levogo
int y = 0; //verhnego ugla
int dir = -1; //Napravlenie vlevo vniz
fstream filestr;
filestr.open ("massiv.txt", fstream::in);
int m=0;
while(m<n*n)
{
filestr >> a[m];
cout<<" "<<a[m];
m++;
}
cout<<endl;
filestr.close();
//for(i=0; i<n*n; i++){
while(i<n*n){
//Proverka, chto ne vylezli napravo
if (x > n-1){
dir = -dir; //izmenjaem napravlenie
y = y - 2 * dir; //korrektiruem
x = x + dir; //poziciju
}
//Proverka, chto ne vylezli vniz
else if (y > n-1){
dir = -dir; //izmenjaem napravlenie
y = y - dir; //korrektiruem
x = x + 2 * dir; //poziciju
}
//Proverka, chto ne vylezli nalevo
else if (x < 0){
dir = -dir; //izmenjaem napravlenie
x = x + dir; //korrektiruem poziciju
}
//Proverka, chto ne vylezli vverh
else if (y < 0){
dir = -dir; //izmenjaem napravlenie
y = y - dir; //korrektiruem poziciju
}
Mas[x][y] = a[i]; //Zapolnjaem jachejku
x = x + dir; //Perehodim k sledujuwej jachejke
y = y - dir; //v tekuwem napravlenii
i++;
}
/* Zamechanie. Proverki peresechenija pravoj i nizhnej granic massiva
dolzhny delat'sja ran'she proverok peresechenija levoj i verhnej
granic. Pochemu - mozhno rassmotret' sluchai popadanija v
pravyj verhnij i v levyj nizhnij ugly. */
//Vyvod soderzhimogo massiva na jekran
for (y = 0; y < n; y++){
//Vyvodim vse jelementy odnoj stroki (po 3 pozicii na chislo)
for (x = 0; x < n; x++)
cout<<Mas[x][y]<<" ";
//Perehodim k sledujuwej stroke
cout<<endl;
}
getch();
}
Помогите решить задачу по С++
Поменять местами максимальный и минимальный элементы среди простых чисел исходного одномерного массива. Результат вывести.
Delirium
30-06-2011, 00:46
Vietryk, в чем проблема? Ты просишь не помочь, а написать за тебя.
Помогите решить задачу по С++
Поменять местами максимальный и минимальный элементы среди простых чисел исходного одномерного массива. Результат вывести »Решение будет примерно таким:
1. Создаёте массив и заполняете, рандомно или определёнными значениями.
#include <iostream>
using namespace std;
#include <conio.h>
#include <stdlib.h>
#include <ctime.h>
using std::time;
...
...
...
const int size = 100;
int array[size] = {0};
int IndexMin = 0, // Индекс минимального
IndexMax = 0, // Индекс максимального
Min = 0;
Max = 0;
temp; // Для перестановки
// Рандомная инициализация массива
...
...
2. Поиск максимального и минимального значения. Проходите массив циклом на поиск минимального и максимального значений, сохраняете индексы массива где найден минимальное и максимальное значение в переменные.
...
Max = Min = array[0];
for(int i = 0; i < size; i++){
if(array[i] < Min){
Min = array[i];
IndexMin = i;
}
if(array[i] > Max){
Max = array[i];
IndexMax = i;
}
}
}
...
3. Обращаетесь потом к этим элементам
...
// Перестановка
temp = array[IndexMin];
array[IndexMin] = array[IndexMax];
array[IndexMax] = temp;
...
4. Выводим на экран
...
cout<<"\nMax = "<<array[IndexMax]<<"\n"<<"Min = "<<array[IndexMin]<<endl;
...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.