Допомога - Пошук - Користувачі - Календар
Написать 2 простейших программ,С++
XJedi FORUM: Online lightsaber fighting game > Всяка всячина > Кантіна > Web, Hard & Soft
Elix
Я начал изучать С++ в универе,и так получилось,что пришлось нашей группе не пойти на 1 пару лекции,собственно некоторый материал до меня не дошел...
Если кому-то не лень,напишите 2 простых проги(как мне сказали,проги делать минут 20).

1)Написати програму, яка переводить числа з арабської системи в римську.
1000 M
500 D
100 C
50 L
10 X
5 V
1 I
2)Написати програму, яка за введеними сторонами трикутника обчислює його площу, периметр, висоти, бісектриси і медіани.
Все нужные формулы,вроде:
S=sqrt(p*(p-a)*(p-B )*(p-c));
P=((a+b+c)/2);
ha=(2*sqrt(p*(p-a)*(p-B )*(p-c)))/a;
hb=(2*sqrt(p*(p-a)*(p-B )*(p-c)))/b;
hc=(2*sqrt(p*(p-a)*(p-B )*(p-c)))/c;
ma=(sqrt(2*b*b+2*c*c-a*a )/2);
mb=(sqrt(2*a*a+2*c*c-b*B )/2);
mc=(sqrt(2*b*b+2*a*a-c*c )/2);
ba=(2*sqrt(b*c*p*(p-a)))/(b+c);
bb=(2*sqrt(a*c*p*(p-B )))/(a+c);
bc=(2*sqrt(b*a*p*(p-c)))/(b+a);

+В програмах должны быть "проверки правельности ввода". Всмысле,например просят:
"введите число",а мы вводим букву, и програма должна написать что-то типа:" неправильно ввели переменную",или что-то типо такого!
+Если не трудно,то можно оставить пару коментов в самом коду программы;

Заранее благодарю!
Nikooz
Триугольник:

Исходный код


#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;

int main()
{
    bool chisloA=true, chisloB=true, chisloC=true;
    int i=0;
    double a=0.0, b=0.0, c=0.0;
    char Ca[255], Cb[255], Cc[255], T_choose;
    Input:     cout << endl << "To exit type \"exit\"" << endl << "Enter lenghts of A, B, C: "; //Метка ввода
    chisloA=chisloB=chisloC=true;
    
    for(i=0; i<=255; i++)//обнуляем все значения
    {
        Ca[i]=Cb[i]=Cc[i]=0;
    }
    //ввод
    cout << endl << "Enter A: ";
    cin >> Ca;
    if((Ca[0]=='e') && (Ca[1]=='x') && (Ca[2]=='i') && (Ca[3]=='t'))
    {
        cout << endl << "Bye-bye";
        getch();
        return 0;
    }
    cout << endl << "Enter B: ";
    cin >> Cb;
    if((Cb[0]=='e') && (Cb[1]=='x') && (Cb[2]=='i') && (Cb[3]=='t'))
    {
        cout << endl << "Bye-bye";
        getch();
        return 0;
    }
    cout << endl << "Enter C: ";
    if((Cc[0]=='e') && (Cc[1]=='x') && (Cc[2]=='i') && (Cc[3]=='t'))
    {
        cout << endl << "Bye-bye";
        getch();
        return 0;
    }
    cin >> Cc;

    for (int i=0;i<255;i++) //проверка - числа ли введены
    {
        if (Ca[i] != 0 && Ca[i] < '0' || Ca[i] > '9') chisloA=false;
        if (Cb[i] != 0 && Cb[i] < '0' || Cb[i] > '9') chisloB=false;
        if (Cc[i] != 0 && Cc[i] < '0' || Cc[i] > '9') chisloC=false;
        if (Ca[i] == '.') chisloA=true;
        if (Cb[i] == '.') chisloB=true;
        if (Cc[i] == '.') chisloC=true;
    }
    
    if ((chisloA==false) || (chisloB==false) || (chisloC==false))
    {
        cout << endl << endl << "Wrong input! :E" << endl;
        goto Input;
    }
    
    a=atof(Ca); b=atof(Cb); c=atof(Cc); //Превращаем из текста в числа

    if((a < (b + c)) && (b < (a + c)) && (c < (a + b))) //проверка на правильность длин сторон
    {
        cout << endl << endl;
        cout << "Perimetr: " << ((a+b+c)/2) << endl;
        int p=((a+b+c)/2);
        cout << "Square: " << sqrt(p*(p-a)*(p-b)*(p-c))  << endl;
        cout << "Height(A): " << (2*sqrt(p*(p-a)*(p-b)*(p-c)))/a  << endl;
        cout << "Height(B): " << (2*sqrt(p*(p-a)*(p-b)*(p-c)))/b  << endl;
        cout << "Height(C): " << (2*sqrt(p*(p-a)*(p-b)*(p-c)))/c  << endl;
        cout << "Median(A): " << (sqrt(2*b*b+2*c*c-a*a)/2)  << endl;
        cout << "Median(B): " << (sqrt(2*a*a+2*c*c-b*b)/2)  << endl;
        cout << "Median(C): " << (sqrt(2*b*b+2*a*a-c*c)/2)  << endl;
        cout << "Bisector(A): " << (2*sqrt(b*c*p*(p-a)))/(b+c)  << endl;
        cout << "Bisector(B): " << (2*sqrt(a*c*p*(p-b)))/(a+c)  << endl;
        cout << "Bisector(C): " << (2*sqrt(b*a*p*(p-c)))/(b+a)  << endl;
    }
    else
    {
        cout << endl << endl << "That can't be..." << endl; //Не может быть триугольника с введенными сторонами
        goto Input;
    }
    
    cout << endl << "Want again?(Y/N) "; //Выйти или повторить?
    cin >> T_choose;
    if((T_choose=='Y') || (T_choose=='y'))
    {
        goto Input;
    }
    else
    {
        cout << endl << "Bye-bye";
    }

    getch();
    return 0;
}



Поправил, чтобы работало и с дробовыми числами)
Boomer
Решение 1й задачи, для классического представления Римских чисел.

думаю должно быть понятно)

#include <iostream> // подключаем хедер для Ввода/вывода (std::cout, std::cin)
#include <cstdlib> // для atoi

//макрос
//#define COUNTN 13

// массив для Римских чисел
const std::string RomanSym[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
//массив для Арабских
const int ArabNum[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

std::string toRoman(int num)
{
std::string tempNum = ""; // временная переменная для римского числа

for (int n = 0; n < 13; ++n ) //13 - размер массива RomanSym и ArabNum
{
if (num >= ArabNum[n])
{
// получаем кол. римских чисел
int d = num / ArabNum[n];

// заносим значение в переменную
for (int i = 0; i < d; ++i)
tempNum += RomanSym[n];

// отнимаем преобразованное значение
num -= d*ArabNum[n];
}
}
return tempNum; // возвращаем значение
}

int main()
{
char inNum[20] = "";
int num;

std::cout << "Type -1 to exit" << std::endl;

do{
std::cout << "Insert number: ";
std::cin >> inNum; // получаем входные данные

num = atoi(inNum); // преобразовываем строку в число
if (num > 0)
{
std::cout << "number: " << toRoman(num).c_str() << std::endl;
}
else std::cout << "wrong number." << std::endl;

}while (num != -1); // продолжаем пока не введут -1

return 0;
}


насчет кода Никоза, забудь goto тебе показалось. Т.е. НЕКОГДА не используй ее)
Elix
Пасиб братюни! Осталось одно, можно ли сделать, так сказать, "защиту" от ввода "Enter"... тобиш чтобы была ещё проверка на ввод Ентера.
Это возможно?
Nikooz
Что? о_О
Elix
Например: программа просит ввести сторону треугольника,а я введу(нажму)клавишу энтер,и ничего не произойдет,пока я не введу цифру.
А препод просит,чтобы при вводе энтера писало типо мол: "неправильно ввели,или тип того". Что-то в таком роде.
Boomer
std::cin >> inNum; заменить на std::cin.getline(inNum, 20);
Elix
Решил не создавать новую тему, а запостить тут)
Напишите кто-то,кто шарит эти формулы(которые обведены в красный квадарат) в виде, который поймет компилятор)
П.С. просто пока времени не хватает переписать)
Nikooz

if(d > 0)
{
u = pow(((-q/2)+sqrt(d)),1/3);
v = -p/(3*u);
y1 = u + v; // odin realniy
// dva mnimyh
y2 = - (u+v)/2 + ((sqrt(3)*(u-v)/2)*i;
y3 = - (u+v)/2 - ((sqrt(3)*(u-v)/2)*i;
}

if(d == 0)
{
pi = M_PI;
r = sqrt(pow(-p,3)/27);
fi = acos(-q/(2*r));
y1 = 2 * fabs(pow(x,3))*cos(fi/3);
y2 = 2 * fabf(pow(x,3))*cos((fi+2*pi)/3);
y3 = y2;
}
VULVARINE
Тема еще актуальна?
Elix
Да не уже) Я уже лабы сдал)
Но вот проблемма в другом:
Надо сделать курсовую работу на тему "работа с мультимедиа" на Visual C++.
Оболочку курсовой сделал,а вот открытие,сохранение, и добавление хоть какого-то эффекта - нет. МБ кто-то знаком с чем-то похожим,а?
.
Invision Power Board © 2001-2025 IPS , Inc.