C/C++ - [решено] Помогите решить задачу по С++

Ответить
 • Просмотры: 5
Аватара пользователя
грек

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение грек »

Код:

Код: Выделить всё

#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;
}

Какую еще можно формулу применить для нахождения внутренних углов треугольника АВС (препод сказал что мои формулы неправильны)
Аватара пользователя
lxa85

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение lxa85 »

Как новичек - привыкай правильно оформлять пост.

Код обрамляется тегом или #.


Цитата:





Код:

Код: Выделить всё

a = sqrt( pow(x1-x2,2) + pow(y1-y2,2) );





Это получение стороны a? треугольника ABC?

Да, формула не верна, проверяй правильность расставленных скобок.

Формула нахождения углов вообще не понятна.

Что делать и как исправлять?

Все просто. Берем Марка нашего уважаемого Яковлевича
Выгодского
Справочник по элементарной математике, ищем §22 Основные соотношения между элементами треугольника. (по приведенной ссылке стр 367-367 текста и стр 341-343 djvu файла) и внимательно смотрим и применяем формулы расчета требуемых величин.

Так же не забываем пересчитывать радианы в градусы и обратно.
Аватара пользователя
Titanium

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Titanium »

Понятно, спасибо. Посмотрите, пожалуйста, что не так в этом коде.



Код:

Код: Выделить всё

#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;
}

тут нужно найти абсциссы первых точек касания
Аватара пользователя
lxa85

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение lxa85 »

Buchik, вычитаются равные друг другу матрицы.

Далее любым удобным способом перебираем все элементы матрицы и производим вычитание.

В чем сложность? Что смутило? Изображение
Аватара пользователя
Titanium

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Titanium »

Код:

Код: Выделить всё

#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. При каждом ударе о плоскость кинетическая энергия уменьщается в б раз. Найти абциссы первых точек касания. Сопротивлением воздуха пренебречь



в этом параграфе основные соотношения между элементами треугольника только половинные углы, а мне нужно найти внутренние углы треугольника АВС
Аватара пользователя
Buchik

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Buchik »

Вот я немного так сказать зациклился....





•определение номера строки (номеров строк), в которой находится самая длинная серия одинаковых элементов.







я немогу "всунуть" условие, когда в нескольких строках одинаковые элементы, и они в то же время, являются максимально долгой последовательностью... вот код программы:

пишу в 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;
}
Аватара пользователя
Buchik

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Buchik »

Может, кто знает, или сталкивался с поэлементным вычитанием матриц?(мы не знаем ни разметрность одной матрицы, ни размерность 2-ой)
Аватара пользователя
lxa85

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение lxa85 »

Buchik, вычитаются равные друг другу матрицы.

Далее любым удобным способом перебираем все элементы матрицы и производим вычитание.

В чем сложность? Что смутило? Изображение
Аватара пользователя
Buchik

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Buchik »

Уже сделал, просто думал как это реализовать))))Да и забыл как их минусовать друг с другом))) думал на подобии умножения что-то))
Аватара пользователя
Buchik

Re: C/C++ - [решено] Помогите решить задачу по С++

Сообщение Buchik »

Цитата Vietryk:



Помогите решить задачу по С++

Поменять местами максимальный и минимальный элементы среди простых чисел исходного одномерного массива. Результат вывести
C/C++ - [решено] Помогите решить задачу по С++




Решение будет примерно таким:

1. Создаёте массив и заполняете, рандомно или определёнными значениями.



Код:

Код: Выделить всё

#include 
using namespace std;
#include 
#include 
#include 
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
Ответить

Вернуться в «Программирование и базы данных»