Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование функции, отрезки образ.треугольник 
:(
    Опции темы
gerda
Дата 28.11.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.11.2005

Репутация: нет
Всего: нет



Привет. У меня снова проблемы smile Помогите пожалуйсто!

Нужно спрограмировать программу в C++ используя функцию. Даны n натуральные числа a1, .... an, которые указывают на длину отрезка. Напечатать все возможные пары (3). каторые образуют треугольник и соответственную площадь треугольника.


PM MAIL   Вверх
Rick
Дата 28.11.2005, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: 2
Всего: 3



1. Вытаскиваешь из массива 3 числа
2. Проверяешь, чтобы каждое было бы не больше суммы двух остальных
3. Находишь площадь по формуле Герона
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
darkart
Дата 29.11.2005, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Если для прямоугольных треугольников, то вот:
Код

#include<iostream.h>
const int n=5;//кол-во элементов массива
void InputArray(int Array[])
//ввод массива
{
        for(int i=0;i<n;i++)
                cin>>Array[i];
}

void PrintArray(int Array[])
//печать массива
{
        for(int i=0;i<n-1;i++)
                cout<<Array[i]<<" ";
        cout<<Array[n-1]<<"\n";
}
float GetArea(int x, int y)
//ф-ция возвращает площадь треугольника с основанием x и высотой y
{
        return x*y/2.0;
}
void Test(int Array[])
//ф-ция проверяет является ли тройка чисел длинами сторон прямоугольного тр-ка
{
        int i,j,k;
        for(i=0;i<n-2;i++)
                for(j=i+1;j<n-1;j++)
                        for(k=j+1;k<n;k++)
                        {
                                int sqri=Array[i]*Array[i];
                                int sqrj=Array[j]*Array[j];
                                int sqrk=Array[k]*Array[k];
                                if(sqri==sqrj+sqrk)cout<<Array[i]<<":"<<Array[j]<<":"<<Array[k]<<" is |_ triangle. Area="<<GetArea(Array[j],Array[k])<<"\n";
                                if(sqrj==sqri+sqrk)cout<<Array[i]<<":"<<Array[j]<<":"<<Array[k]<<" is |_ triangle. Area="<<GetArea(Array[i],Array[k])<<"\n";
                                if(sqrk==sqri+sqrj)cout<<Array[i]<<":"<<Array[j]<<":"<<Array[k]<<" is |_ triangle. Area="<<GetArea(Array[i],Array[j])<<"\n";
                        }
}
int main()
{
        int Array[n];
        cout<<"Please enter an array("<<n<<"):\n";
        InputArray(Array);
        cout<<"Source array:\n";
        PrintArray(Array);
        Test(Array);
        return 0;
}

PM MAIL WWW ICQ Skype GTalk   Вверх
gerda
Дата 1.12.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.11.2005

Репутация: нет
Всего: нет



hmm а как можно сделать эту же програмка только не с прямоугольным треугольником smile
PM MAIL   Вверх
Rick
Дата 1.12.2005, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 4.11.2005
Где: Новосибирск

Репутация: 2
Всего: 3



dakart а в чем проблема для всех треугольников?

Си не знаю, вот на Паскале:
код не оптимален!

Код

const m=10;
var a:array [1..m] of integer;
    r:array [1..m] of real;
    p,s:real;
    i1,i2,i3,j,n:integer;
begin
clrscr;
writeln('write stroka ');
for i1:=1 to m do begin
read(a[i1]);
end;
readln;
n:=0;
for i1:=1 to m-2 do begin
 for i2:=i1+1 to m-1 do begin
  for i3:=i2+1 to m do begin
   if (a[i1]<a[i2]+a[i3]) and (a[i2]<a[i1]+a[i3]) and (a[i3]<a[i1]+a[i2]) then begin
   p:=(a[i1]+a[i2]+a[i3])/2;
   s:=sqrt(p*(p-a[i1])*(p-a[i2])*(p-a[i3]));
   {исключение повторений}
   for j:=1 to m do begin
    if r[j]=s then break;
    if (r[j]<>s) and (j=m) then begin
    writeln(a[i1],' ',a[i2],' ',a[i3],'  S-',s:2:2);
    n:=n+1;
    r[n]:=s;
    end;
   end;
   end;
  end;
 end;
end;
readln;
end.



Это сообщение отредактировал(а) Rick - 1.12.2005, 19:25
--------------------
Не бывает атеистов в окопах под огнем   
PM MAIL ICQ   Вверх
darkart
Дата 1.12.2005, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Ладно...
Заменить:
Код

float GetArea(int x, int y,int z)
{
        float p=(x+y+z)/2.0;
        return sqrtf(p*(p-x)*(p-y)*(p-z));{ф-ла герона}
}
void Test(int Array[])
{
        int i,j,k;
        for(i=0;i<n-2;i++)
                for(j=i+1;j<n-1;j++)
                        for(k=j+1;k<n;k++)
                        {
                                int sqri=Array[i]*Array[i];
                                int sqrj=Array[j]*Array[j];
                                int sqrk=Array[k]*Array[k];
                                if(Array[i]<Array[j]+Array[k]&&Array[j]<Array[i]+Array[k]&&Array[k]<Array[i]+Array[j])
                                    cout<<Array[i]<<":"<<Array[j]<<":"<<Array[k]<<". Area="<<GetArea(Array[i],Array[j],Array[k])<<"\n";
                        }
}

PM MAIL WWW ICQ Skype GTalk   Вверх
gerda
Дата 7.12.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.11.2005

Репутация: нет
Всего: нет



smile в этой проге можно ввести только 5 чисел, а что можно сделать, для того, чтобы можно было бы ввести безконечное количество чисел


Код

#include <iostream.h>
#include <math.h> // sqrt
#include <conio.h> // getch()
const int n=5;
void InputArray(int Array[])

{
        for(int i=0;i<n;i++)
                cin>>Array[i];
}

void PrintArray(int Array[])

{
        for(int i=0;i<n-1;i++)
                cout<<Array[i]<<" ";
        cout<<Array[n-1]<<"\n";
}
double GetArea(int x, int y, int z)


{
        double p = (x+y+z)*0.5;
        return sqrt(p*(p-x)*(p-y)*(p-z));
}
void Test(int Array[])
 

{
  int i,j,k;
  for(i=0;i<n-2;i++)
    for(j=i+1;j<n-1;j++)
      for(k=j+1;k<n;k++)
       if ( Array[i]<Array[j]+Array[k] && Array[j]<Array[i]+Array[k] &&  Array[k]<Array[j]+Array[i])
        cout<<Array[i]<<":"<<Array[j]<<":"<<Array[k]<<" triistuuris. S="<<GetArea(Array[i],Array[j],Array[k])<<"\n";
}

 


int main()
{

char ex='j';
while (ex=='j'||ex=='J'){       
        int Array[n];
        cout<<"Enter array. ("<<n<<"):\n";
        InputArray(Array);
        cout<<"Source array:\n";
        PrintArray(Array);
        Test(Array);
        getch();
        cout<<"Continue??? j-yes n-no";
        cin>>ex;
}
        return 0;
}



 ! 
 
Для кого тут люди много времени тратили, чтобы написать современную подсветку синтаксиса? Не забываем ользоваться кнопкой кода... :)


Это сообщение отредактировал(а) lonely delphist - 7.12.2005, 21:21
PM MAIL   Вверх
Pakshin A. S.
Дата 7.12.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 5
Всего: 61



ИМХО, вроде есть в Сях динамические массивы...
Код

int Array[];

Вроде так...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.