Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 83, средняя оценка - 4.90
Grand1
0 / 0 / 0
Регистрация: 19.11.2009
Сообщений: 7
#1

Определить, существует ли треугольник со сторонами a, b, c - C++

19.11.2009, 09:22. Просмотров 10617. Ответов 28
Метки нет (Все метки)

1) поределить существует ли треугольник со сторонами a,b,c, и если существует,то является ли он равносторонним,равнобедренным или разносторонним
2) вычислить r=p!где P третье число делящееся на 9 в диапазоне от 20 до 100
3)вывести на экран третье,пятое и шестое число,кратное 3и 7 в диапазоне от 120 до 270
4)задан массив Z(n) целых чисел.удалить из массива наибольший и наименьший элементы.в преобразованом массиве найти среднее арифметическое тени наибольших элементов.
5)задан массив z(k) целых чисел.поределить в массиве количество простых двухзначных чисел.если таких чисел больше двух,удалить их из массива.проверить,изменился ли максимальный элемент массива
заранее благодарен за помощь!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2009, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить, существует ли треугольник со сторонами a, b, c (C++):

Определить, существует ли треугольник со сторонами a, b, c - C++
Задача: Определить, существует ли треугольник со сторонами a, b, c. Примечание: Стороны a, b, c вводятся с клавиатуры

Определить, существует ли треугольник с заданными сторонами - C++
Даны три натуральных числа A, B, C. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку...

Выяснить существует ли треугольник со сторонами x,y,z , и определить его вид - C++
Даны действительные положительные числа x,y,z . Выяснить существует ли треугольник со сторонами x,y,z , и определить его вид.

Программа, определяющая, существует ли треугольник со сторонами a, b, c, и является ли он тупоугольным - C++
Даны вещественные положительные числа a, b, c. Составить программу, определяющую: существует ли треугольник со сторонами a, b, c, и...

Определить, является ли треугольник со сторонами a,b,c равносторонним - C++
Определить, является ли треугольник со сторонами a,b,c равносторонним

Определить, является ли треугольник со сторонами a, b, c равносторонним - C++
1.Определить, является ли треугольник со сторонами a, b, c равносторонним.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wolf1851
Сообщений: n/a
21.11.2009, 17:24 #16
Пожалуйста помогите решить задания:
1.Найти натуральное число от n до k с максимальной суммой делителей
2.Дано натуральное число n. Получить его каноническое разложение (разложение на простые множители).
3.Дано натуральное k <=2109. Вывести k цифру последовательности 011212201220200112... Последовательность строится следующим образом: сначала 0, затем повторяем: уже написанную часть приписываем справа с заменой 0 на 1, 1 на 2, 2 на 0.
Всё организовать через цикл.
lolopolosko
1354 / 312 / 5
Регистрация: 21.11.2009
Сообщений: 992
21.11.2009, 17:32 #17
Советую тебе книгу "Язык програмирования С++ (учебный курс)" Автор С.В. Глушаков , С.В.Смирнов

ДЛЯ новичков

Добавлено через 3 минуты
Цитата Сообщение от Андрейка Посмотреть сообщение
Grand1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    std::vector<int>vec(arr,arr+sizeof(arr)/sizeof(*arr));
    std::cout<<"исходный массив"<<std::endl;
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    std::cout<<std::endl;
    vec.erase(std::remove_if(vec.begin(),vec.end(),std::bind2nd(std::greater<int>(),std::accumulate(vec.begin(),vec.end(),0)/vec.size())),vec.end());
    std::cout<<"новый массив"<<std::endl;
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    system("pause");
    return 0;
}
Добавлено через 37 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <numeric>
 
struct sover : public std::unary_function<int,bool> 
{
  bool operator() (int number)
  {
      int sum = 0 ;
      for (size_t i = 1 ; i < number ; i++)
      {
          if (number%i==0)
          {
              sum=sum+i;
          }
      }
      if (sum==number) return true;
      else
          return false;
  }
 
};
 
struct prost : public std::unary_function<int,bool>
{
    bool operator() (int number)
    {
        for (int i = 2 ; i < number ; i++)
            if (number % i == 0 ) return false;
        return true;
    }
};
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    int arr[] = {2,3,4,5,6,7,8,9,10};
    std::vector<int>vec(arr,arr+sizeof(arr)/sizeof(*arr));
    std::cout<<"исходный массив"<<std::endl;
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    std::cout<<std::endl;
    std::cout<<"количество совершенных чисел"<<' '<<std::count_if(vec.begin(),vec.end(),sover())<<std::endl;
    std::cout<<"количество простые чисел"<<' '<<std::count_if(vec.begin(),vec.end(),prost())<<std::endl;
    vec.erase(std::remove_if(vec.begin(),vec.end(),std::bind2nd(std::greater<int>(),std::accumulate(vec.begin(),vec.end(),0)/vec.size())),vec.end());
    std::cout<<"новый массив"<<std::endl;
    std::copy(vec.begin(),vec.end(),std::ostream_iterator<int>(std::cout," "));
    std::cout<<std::endl;
    std::cout<<"количество совершенных чисел"<<' '<<std::count_if(vec.begin(),vec.end(),sover())<<std::endl;
    std::cout<<"количество простые чисел"<<' '<<std::count_if(vec.begin(),vec.end(),prost())<<std::endl;
    system("pause");
    return 0;
}
А не проще дописать
C++
1
using namespace std;
чтобы было понятно новичку...и не входило в заблуждения
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
21.11.2009, 19:17 #18
lolopolosko, новичку наоборот так будет проще запутаться. Пусть с самого начала привыкает писать правильно
0
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
22.11.2009, 00:43 #19
Grand1, ниче в коде сложного нет как дойдёшь до STL поймёшь о чем тут
0
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
22.11.2009, 14:56 #20
Столкнулся с этой же задачей. Смог сделать только так, чтоб массив был const. Как можно переделать код, чтобы длина массива задавалась с клавиатуры? Я не смог разобраться, как здесь это сделать с помощью указателя. В других программах получалось, а здесь не смог справиться.

Добавлено через пару минут
Кстати, задача на средние значения диапазона.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL,"RUSSIAN");
long long int sum=0, mul=1, itt=0;
    for(int i = 101; i <= 213; i++)
    {
        if( !(i%7) && i%2 )
        {
            sum+=i;
            mul*=i;
            itt++;
        }
    }
cout << "Cреднее арифметическое нечетных чисел, кратных 7 в диапазоне от 101 до 213 равно" << sum/itt 
     << ", среднее геометрическое " << pow((float)mul,(float)1/itt) << "." << endl << endl;
system("pause");
return 0;
}
А вот в задаче с простыми и совершенными числами я так и не сообразил, как организовать ввод длины массива с клавиатуры, чтоб потом всё работало.
0
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 15:08 #21
2) вычисление факториала 45.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
const int maxElem=99999;
 
int main(int argc, char* argv[])
{
printf("-----------------------------------");
printf("Naxogdenie factoriala\n");
printf("");
int BigElem=0;
int fact;// факториал, который нужно найти(вводится пользователем)
int sizeEl=0;//размер числа(факториала)
int num[maxElem];//факториал в виде массива
int numtmp[maxElem];//временный массив для хранения промежуточного факториала
for(int pp=0;pp<maxElem;pp++)//цикл инициализации массивов
{num[pp]=0;numtmp[pp]=0;}
num[0]=1;
numtmp[0]=1;
printf("Vvedite chislo factorial kotorogo nado poschitat: ");
scanf("%i",&fact);
printf("Start search factorial %i\n ",fact);
for(int i=1;i<fact;i++)
{//for 1 st
cout<<i*100/fact<<"%"<<'\r';// вывод процента выполненых работ
for(int tm=0;tm<=sizeEl;tm++){numtmp[tm]=num[tm];}
for(int j=1;j<=i;j++)
{//for 2 st
    for(int k=0;k<=sizeEl;k++)
    {
num[k]=num[k]+numtmp[k];
if(num[k]>9)
{//st if 1
    num[k+1]=num[k+1]+num[k]/10;num[k]=num[k]-(num[k]/10*10);
    if((k+1)>sizeEl){sizeEl++;if(sizeEl>maxElem-1){i=fact+1;j=i+1;BigElem=-1;};break;}
}//if 1 end
    }
}//for 2 end
 
}//for 1 end
if(BigElem==-1)
{printf("Size of element is too big, Sorry...",&sizeEl);scanf("%i",fact);}
else
{
printf("Factorial of %i is : ",fact);
for(int t=sizeEl;t>=0;t--)//вывод числа на консоль
{printf("%i",num[t]);}         
}
printf("\n\n");
  system("pause");
}
Сделано для числа, вводимого с клавиатуры
1
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
28.11.2009, 19:02 #22
При работе над программой с массивами возник такой вот вопрос: ввожу элементы масива из файла с помощью ifstream. Программа сделана так, что в файле первый элемент должен был указывать число элементов массива, над которыми будут производиться операции. Столкнулся с проблемой: файл создан, но он пустой. Тогда вылетает ошибка. Как можно её предотвратить? Можно ли сделать ввод из файла, не указывая первым элементом число всех элементов массива?

Фрагмент программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <fstream>
#include <sstream>
#include <cfloat>
#include <cmath>
 
using namespace std;
 
bool StrToNum (string sz, int & number)
{
    istringstream stream(sz);
    stream >> number;
    return (!stream.fail()) && (int(stream.tellg()) == sz.length()) && (number >= 0);
}
 
bool StrToNum (string sz, float & number)
{
    istringstream stream(sz);
    stream >> number;
    return (!stream.fail()) && (int(stream.tellg()) == sz.length()) && (fabs(number) <= FLT_MAX);
}
 
bool ReadNumber (int & x)
{
    string a;    
    do
    {
        cin >> a;
        if (StrToNum(a, x)) break;
        cout << endl << "Число введено неверно или оно не входит в допустимый диапозон значений!" << endl
             << "Повторите ввод." << endl << endl;
    }
    while (true);
    return true;
}
 
bool ReadNumber (float & x)
{
    string a;    
    do
    {
        cin >> a;
        if (StrToNum(a, x)) break;
        cout << endl << "Число введено неверно или оно не входит в допустимый диапозон значений!" << endl
             << "Повторите ввод." << endl << endl;
    }
    while (true);
    return true;
}
 
int ProgramSecondBody()
{
        ifstream first("first.txt");
        ifstream second("second.txt");
 
        if(!first.is_open())
        {
                cout << "Ошибка! Файл first.txt не найден!" << endl << endl;
                cin.get();
                cin.get();
                return 0;
        }
        if(!second.is_open())
        {
                cout << "Ошибка! Файл second.txt не найден!" << endl << endl;
                cin.get();
                cin.get();
                return 0;
        }
        float *masA, *masB, min1, min2, max, count=0;
        int  n, m, i;
        bool fl = true;
 
        first >> n;
        second >> m;
 
        masA = new float[n];
        
        if (!masA)
        {
                cout << "Программе не хватает памяти для работы!" << endl;
                delete [] masA;
                cin.get();
                cin.get();
                return 1;
        }
        
        masB = new float[m];
 
        if (!masB)
        {
                cout << "Программе не хватает памяти для работы!" << endl;
                delete [] masB;
                cin.get();
                cin.get();
                return 1;
        }
        
        for(int i = 0; i < n; i++)
                first >> masA[i]; 
 
        for(int i = 0; i < m; i++)
                second >> masB[i];
                
        cout << "Внимание! При наличии ошибок в файле содержимое может отображаться некорректно." << endl << endl
        << "Исходный массив 1:" << endl;
             for(i = 0; i < n; i++)
                 cout << masA[i] << " " << endl;
                 
        cout << endl << "Исходный массив 2:" << endl;
             for(i = 0; i < m; i++)
                 cout << masB[i] << " " << endl;
        
        min1 = masA[0]; //Начало поиска минимального элемента
        for(i = 0; i < n; i++)
            if(min1 > masA[i])
                min1 = masA[i];
                min2 = min1-1;
                max = masA[0];
                for(i = 0; i < n; i++)
                         if(max < masA[i])
                         max = masA[i];
                while(fl && count <= n)
                {
                        fl = false;
                        min1 = max;
                        for(i = 0; i < n; i++)
                                 if(min1 > masA[i] && masA[i] > min2)
                                 min1 = masA[i];
                        for(i = 0; i < m; i++)
                                 if(min1 == masB[i])
                                        {
                                                fl = true;
                                                min2 = min1;
                                        }
                        count++;
                }
                if (count == n+1)
                        cout << endl << "Искомого элемента нет." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
                else
                        cout << endl << "Искомый элемент равен " << min1 << "." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
        cin.get();
        cin.get();
        return 0; 
}
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 19:32 #23
Столкнулся с проблемой: файл создан, но он пустой. Тогда вылетает ошибка.
Какая ошибка у Вас вылетает?

Можно ли сделать ввод из файла, не указывая первым элементом число всех элементов массива?
Вы имеете ввиду если в файле будут записаны просто элементы массива?
0
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
29.11.2009, 03:32 #24
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Какая ошибка у Вас вылетает?
при использовании MS Visual 2008 вылетает "Debug Error. Invalid allocation size: 4294967285 bytes".
Используя Dev-CPP, при запуске программы на экране в столбец проставляются нули.

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Вы имеете ввиду если в файле будут записаны просто элементы массива?
Да, именно это я и хотел спросить.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2009, 09:55 #25
Да, действительно, так все и есть (проверил на 2008, Dev-CPP у меня отсутствует). А происходит это вот почему:
строки 75 и 76 Вашего кода
C++
1
2
        first >> n;
        second >> m;
здесь вы считываете первые числа из first.txt и second.txt, а затем динамически выделяете память
строка 78:
C++
1
masA = new float[n];
и строка 89:
C++
1
 masB = new float[m];
Если у Вас в файлах first.txt и second.txt числа есть (а значит и в переменных n и m тоже), то память будет выделена. Но если в файлах отсутствуют числа (и в переменных n и m значит тоже отсутствуют значения), то тогда выдается именно такая ошибка. Так и должно быть.
Теперь ответы на Ваши вопросы:
Цитата Сообщение от Neys Посмотреть сообщение
Столкнулся с проблемой: файл создан, но он пустой. Тогда вылетает ошибка. Как можно её предотвратить?
Записать в файлы first.txt и second.txt необходимые значения.

Цитата Сообщение от Neys Посмотреть сообщение
Можно ли сделать ввод из файла, не указывая первым элементом число всех элементов массива?
Можно, но тогда нужно будет два раза считывать данные из каждого файла - первый раз считывая, вычисляем кол-во элементов в файле и заносим это значение в переменную n или m соответственно. Затем выделяем динамически память (как у Вас и сделано) используя значение n или m. Затем считываем сами элементы из файла.
1
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
29.11.2009, 10:02 #26
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Первый раз считывая, вычисляем кол-во элементов в файле и заносим это значение в переменную n или m соответственно.
Подскажите, как это можно сделать?
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2009, 10:28 #27
Вообще-то это не самый лучший способ. Проще, если бы Вы считывали сначало кол-во элементов массива, а потом сами элементы в уже созданный массив. Ну ладно, вот Вам вариант:
После того как открыли файл
C++
1
2
3
4
5
    while(!first.eof())
        {
            first>>count;
            n++;
        }
На этом этапе у Вас в n количество чисел в массиве. Здесь Вы создаете (с помощью оператора new свой массив). Затем так:
C++
1
2
3
4
5
6
7
8
    first.clear();
    first.seekg(0);
                       i=0;
        while(!first.eof())
        {
            first>>masA[i];
                                  i++;
        }
Можно эту часть и не через while а через for описать. Аналогично и для второго файла и массива.
0
Beg1ner
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 9
04.12.2009, 20:21 #28
А не подскажите алгоритм нахождения мин. элемента? Как я понял, за минимальный берем первый элемент, потом сравниваем его со следующим, а что дальше, я не допонимаю. В частности, для чего max и count.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.12.2009, 07:41 #29
Beg1ner, Я так понимаю, что Вас интересует код в строках: 115-144.
Вот этот кусок кода с комментариями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
       min1 = masA[0]; //Начало поиска минимального элемента
        for(i = 0; i < n; i++)
            if(min1 > masA[i])
                min1 = masA[i];
                min2 = min1-1; // вот в этом месте минимальное значение массива masA[] находится в переменной min1, и переменной min2 присваивается значение на 1 меньше чем min1 
                max = masA[0];
                for(i = 0; i < n; i++)
                         if(max < masA[i])
                         max = masA[i];
                while(fl && count <= n) // в этой строке максимальное значение массива masA[] в max
                {
                        fl = false;
                        min1 = max; // в переменной min1 теперь максимальное значение массива masA[]
                        for(i = 0; i < n; i++) // после этого цикла min1 снова минимальное значение masA[]
                                 if(min1 > masA[i] && masA[i] > min2)
                                 min1 = masA[i];
                        for(i = 0; i < m; i++) // в этом цикле идет сравнение min1 со всеми элементами массива masB, если хоть раз будет совпадение, то выполнится условие в скобках. Если нет то будет выход из цикла while(fl && count <= n)
                                 if(min1 == masB[i])
                                        {
                                                fl = true;
                                                min2 = min1;
                                        }
                        count++; // повышается на единицу
                }
                if (count == n+1) // это условие получается выполнится, если в массиве masA нет одинаковых элементов, и если все элементы массива masA, присутствуют в массиве masB
                        cout << endl << "Искомого элемента нет." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
                else // это условие выполнится, когда в min1 будет самое минимальное значение массива masA[] которого нет в массиве masB[]
                        cout << endl << "Искомый элемент равен " << min1 << "." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2009, 07:41
Привет! Вот еще темы с ответами:

Определить существует ли ромб с задаными сторонами a,b,c,d (без операторов ввода и ввывода,в режиме отладчика) - C++
Написать в с++

Даны стороны треугольника. Определить, существует ли такой треугольник, и является ли он тупоугольным - C++
24 Даны вещественные положительные числа a, b, c. Составить программу, определяющую: существует ли треугольник со сторонами a, b, c, и...

Даны два угла треугольника (в градусах). Определить существует ли такой треугольник - C++
10 Даны два угла треугольника (в градусах). Определить существует ли такой треугольник, и если да, то будет ли он прямоугольным. Результаты...

Даны два угла треугольника (в градусах ). Определить существует ли такой треугольник - C++
2. Даны два угла треугольника (в градусах ). Определить существует ли такой треугольник. Если да, то будет ли он прямоугольным.,,, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.12.2009, 07:41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru