Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 12:55   #1
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию Проверьте код в лаб.работе № 1

Задача 1

В соответствии с вариантом задания вычислить:

b) медианы треугольников по формулам
a=0.267;
b=0.173;
c=0.098;

Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
 
int main()
{
float a,b,c,p,ma,mb,mc;
a=0.267;
b=0.173;
c=0.098;
ma=0.5*sqrt(2*b+2*c*c-a*a);
mb=0.5*sqrt(2*a*a+2*c*c-b*b);
mc=0.5*sqrt(2*b*b+2*a*a-c*c);
cout<<"otvet:\n ma="<<ma<<"\n mb="<<mb<<"\n mc="<<mc;
getch();
return 0;
}
Задание 2.
Вычислить значение функции y и z по формулам при различных вещественных типах данных (float и double). Параметр x вводится с клавиатуры. Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты.

Код:
#pragma argsused
#include<stdio.h>
#include <conio.h>
#include<math.h>
#include<iostream>
 
using namespace std;
void main()
{
double x,y,z;
cout<<"Vvedite x:\n";
cin>>x;
y=(1-pow(x,2))/(1+pow(x,2))*sqrt(x);
z=fabs(x)+fabs(y)/(x-y)+fabs(x/y);
 
cout<< "X: " << x;
getch ();
 
}
Изображения
Тип файла: png Снимок экрана 2011-01-16 в 19.02.08.png (17.6 Кб, 45 просмотров)
Тип файла: png Снимок экрана 2011-01-16 в 19.05.29.png (11.6 Кб, 44 просмотров)

Последний раз редактировалось j-pavlov; 21.01.2011 в 14:56.
j-pavlov вне форума Ответить с цитированием
Старый 21.01.2011, 13:29   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

- Лишние инклюды в обеих и лишняя pragma во второй программе (conio, например).
- Инклюды подключаются плохим стилем (math.h вместо cmath, iostream.h вместо iostream). Мало того, iostream.h в нормальном компиляторе вообще не подключится.
- В первой ты делаешь одно и то же трижды. А для того, чтобы не делать одно и то же, придумали функции.
- Отсутствие нормального форматирования.
- Вместо getch() лучше использовать cin.get().
- int main() и так возвращает 0, если завершился, тебе это делать не надо. То есть в первой задаче не надо делать return 0.
- cin и cout находятся в пространстве имён std, то есть их надо вызывать как std::cin и std::cout. Это касается первой программы, а во второй у тебя сделано using namespace std и можно ничего не трогать.
У меня твой код вообще не компилируется, сейчас я всё исправлю с учётом своих замечаний и покажу.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 21.01.2011 в 14:08.
Obey-Kun вне форума Ответить с цитированием
Старый 21.01.2011, 13:40   #3
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
- Лишние инклюды в обеих и лишняя pragma во второй программе (conio, например).
- Инклюды подключаются плохим стилем (math.h вместо cmath, iostream.h вместо iostream). Мало того, iostream.h в нормальном компиляторе вообще не подключится.
- В первой ты делаешь одно и то же трижды. А для того, чтобы не делать одно и то же, придумали функции.
- Отсутствие нормального форматирования.
- Вместо getch() лучше использовать cin.getline().
- int main() и так возвращает 0, если завершился, тебе это делать не надо. То есть в первой задаче не надо делать return 0.
- cin и cout находятся в пространстве имён std, то есть их надо вызывать как std::cin и std::cout.
У меня твой код вообще не компилируется, сейчас я всё исправлю с учётом своих замечаний и покажу.
спасибо огромное за замечания.
жду.
j-pavlov вне форума Ответить с цитированием
Старый 21.01.2011, 14:02   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ещё у тебя ошибка в следующем коде:
Код:
ma=0.5*sqrt(2*b+2*c*c-a*a);
mb=0.5*sqrt(2*a*a+2*c*c-b*b);
mc=0.5*sqrt(2*b*b+2*a*a-c*c);
Вглядись в ma. Должно быть 2*b*b. Используй ты функции, такую ошибку было бы проще отследить.

Вот программа с медианами:
Код:
#include <iostream>
#include <cmath>

/**
 * Длина медианы к стороне a для
 * треугольника со сторонами a, b и c.
 */
float median(float a, float b, float c)
{
    return 0.5 * std::sqrt(2 * b * b + 2 * c * c - a * a);
}

int main()
{
    float a = 0.267;
    float b = 0.173;
    float c = 0.098;
    std::cout << "ma = " << median(a, b, c) << std::endl;
    std::cout << "mb = " << median(b, a, c) << std::endl;
    std::cout << "mc = " << median(c, a, b) << std::endl;
    std::cin.get();
}
А на каком этапе у тебя изучение C++? Структуры из C знаешь? А классы?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 21.01.2011, 14:11   #5
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию

только начал, было 2 занятия по программированию, дали задачи и сказали решить к февральской сессии.
сам разбирался, что понял так и решал ибо проконсультироваться кроме как с интернетом нет возможности.
а со второй задачкой?

спасибо огромное тебе.
j-pavlov вне форума Ответить с цитированием
Старый 21.01.2011, 14:12   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Ещё одно замечание. В первой программе у тебя float, во второй double. Ныне float лучше double только при рассчётах на видеокарте (или если таких объектов дохрена и надо экономить память), но я тут ничего трогать не стал. По идее ничего трогать и на надо, но разницу между float и double ты обязан понимать. Если не понимаешь, спроси, разъясню. И я так и не понял, ты в курсе что такое класс или хотя бы что такое структура из Си?

Ещё ко второй программе,
Плюс ко всему, у тебя во второй программе:
Код:
cout<< "X: " << x;
А просят-то y и z .

И ещё замечания насчёт второй:
- у тебя там используется void main(), а по стандарту main должна быть int.
- если так получается, что x = y (например, при x=1), то при расчёте z происходит деление на 0. При этом z станет равным или бесконечности, или неопределённому значению (0/0). То есть или inf, или nan. Это отдельно не надо обрабатывать? Судя по тому, что отдельно это обрабатывать не просят, то и не надо (программа будет работать нормально и просто покажет, что z = nan или inf). Но мало ли.
- у тебя там тоже ошибка в формуле, ты пишешь z=fabs(x)+fabs(y)/(x-y)+fabs(x/y), а надо z=(fabs(x)+fabs(y))/(x-y)+fabs(x/y) — будь внимательней.

Также хотелось бы увидеть полный текст первого задания. Там нет пояснений насчёт того, что следует использовать?

Вот второе задание:
Код:
#include<iostream>
#include<cmath>

using namespace std;

int main()
{
    double x, y, z;
    cout << "Vvedite x: ";
    cin >> x;
    
    y = (1 - pow(x, 2)) / (1 + pow(x, 2)) * sqrt(x);
    cout << "y = " << y << endl;
    
    z = (fabs(x) + fabs(y)) / (x - y) + fabs(x / y);
    cout << "z = " << z << endl;
    
    cin.get();
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 21.01.2011 в 14:33.
Obey-Kun вне форума Ответить с цитированием
Старый 21.01.2011, 14:25   #7
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию

float - 32-битное число с плавающей точкой
double - 64-битное число с плавающей точкой
j-pavlov вне форума Ответить с цитированием
Старый 21.01.2011, 14:49   #8
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию

Честно я пока что полный нуль. Читаю статьи по с++
и из примеров привел эти 2 задачи. сорри.
Можешь подробно объяснить эти 2 задачки.

преподаватель рекомендует использовать программу C++Builder, но по стечению обстоятельств у меня дома стоят машины с mac os x, можно ли на них в икс коде или каком другом решить эти задачки?

Последний раз редактировалось j-pavlov; 21.01.2011 в 14:56.
j-pavlov вне форума Ответить с цитированием
Старый 21.01.2011, 14:58   #9
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
float - 32-битное число с плавающей точкой
double - 64-битное число с плавающей точкой
Неверно! Это зависит от платформы и компилятора, а в стандарте не указано.
В стандарте вообще не указаны конкретные размеры для стандартных типов. Читай 3.9.1 стандарта.
На деле разница ещё в том, что на старинных FPU, а также на современных видеокартах float'ы обрабатываются быстрее.

Цитата:
преподаватель рекомендует использовать программу C++Builder, но по стечению обстоятельств у меня дома стоят машины с mac os x, можно ли на них в икс коде или каком другом решить эти задачки?
Язык C++ стандартизирован, и ты вправе использовать ту среду разработки и тот компилятор, которые тебе по душе. Только не используй сторонние системно-зависимые библиотеки.

Цитата:
Можешь подробно объяснить эти 2 задачки.
А в чём именно проблема?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 21.01.2011 в 15:04.
Obey-Kun вне форума Ответить с цитированием
Старый 21.01.2011, 15:18   #10
j-pavlov
Пользователь
 
Регистрация: 21.01.2011
Сообщений: 34
По умолчанию

Цитата:
На деле разница ещё в том, что на старинных FPU, а также на современных видеокартах float'ы обрабатываются быстрее.
Согласен, спасибо, сам же выше писал, что разница в том, что double занимает больше памяти, дольше обрабатывается, дает более высокую точность и позволяет хранить большие числа.

Цитата:
Язык C++ стандартизирован, и ты вправе использовать ту среду разработки и тот компилятор, которые тебе по душе.
Знать бы еще как с тем же XCode обращаться ввиду я значения эти, а как их вывести я не знаю.

Цитата:
А в чём именно проблема?
как правильно читать ответ задачи преподавателю?
j-pavlov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте код neomax38 Помощь студентам 2 27.12.2010 16:53
Проверьте код monty "2" Помощь студентам 2 08.04.2010 17:44
Please!!! Проверьте код по Delphi!!! Dmitriy-e-nest Помощь студентам 2 16.01.2009 15:41
Проверьте код ! Михаил Юрьевич Общие вопросы Delphi 7 08.02.2008 09:32
Проверьте пожалуйста код forumu Помощь студентам 1 27.12.2007 21:49