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

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

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

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

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

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

Даны два угла треугольника (в градусах ). Определить существует ли такой треугольник C++
C++ Даны два угла треугольника (в градусах ). Определить существует ли такой треугольник. Если да, то будет ли он прямоугольным.
C++ Определить, является ли треугольник со сторонами a,b,c равносторонним
C++ Даны два угла треугольника (в градусах). Определить существует ли такой треугольник
C++ Даны три положительных числа. Определить, можно ли построить треугольник со сторонами, длины которых равны этим числам. Если возможно, то ответить на
C++ Выяснить существует ли треугольник со сторонами x,y,z , и определить его вид
Определить, существует ли треугольник со сторонами a, b, c C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
22.11.2009, 15:08     Определить, существует ли треугольник со сторонами a, b, c #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");
}
Сделано для числа, вводимого с клавиатуры
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
28.11.2009, 19:02     Определить, существует ли треугольник со сторонами a, b, c #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; 
}
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 19:32     Определить, существует ли треугольник со сторонами a, b, c #23
Столкнулся с проблемой: файл создан, но он пустой. Тогда вылетает ошибка.
Какая ошибка у Вас вылетает?

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

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Вы имеете ввиду если в файле будут записаны просто элементы массива?
Да, именно это я и хотел спросить.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2009, 09:55     Определить, существует ли треугольник со сторонами a, b, c #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. Затем считываем сами элементы из файла.
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
29.11.2009, 10:02     Определить, существует ли треугольник со сторонами a, b, c #26
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Первый раз считывая, вычисляем кол-во элементов в файле и заносим это значение в переменную n или m соответственно.
Подскажите, как это можно сделать?
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2009, 10:28     Определить, существует ли треугольник со сторонами a, b, c #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 описать. Аналогично и для второго файла и массива.
Beg1ner
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 9
04.12.2009, 20:21     Определить, существует ли треугольник со сторонами a, b, c #28
А не подскажите алгоритм нахождения мин. элемента? Как я понял, за минимальный берем первый элемент, потом сравниваем его со следующим, а что дальше, я не допонимаю. В частности, для чего max и count.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2009, 07:41     Определить, существует ли треугольник со сторонами a, b, c
Еще ссылки по теме:

C++ Даны стороны треугольника. Определить, существует ли такой треугольник, и является ли он тупоугольным
C++ Программа, определяющая, существует ли треугольник со сторонами a, b, c, и является ли он тупоугольным
C++ Определить существует ли ромб с задаными сторонами a,b,c,d (без операторов ввода и ввывода,в режиме отладчика)
Определить, существует ли треугольник с заданными сторонами C++
C++ Определить, является ли треугольник со сторонами a, b, c равносторонним

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.12.2009, 07:41     Определить, существует ли треугольник со сторонами a, b, c #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;
Yandex
Объявления
05.12.2009, 07:41     Определить, существует ли треугольник со сторонами a, b, c
Ответ Создать тему
Опции темы

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