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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2011, 20:04   #1
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию Ошибка в коде...

вот я залил на файлообменник условие задачи:
http://zalil.by/files/39b392daeae7ff73e

нужно чтобы в итоге z1 был равен z2...вот мой код, исправьте плз ошибки...

Код:
#include <math.h>
#include <stdio.h>
void main () {
float a;
printf("Vvedite a: \n");
scanf("%f",&a);
printf(" z1=%f",sin(3.14/2)+(3*a)/(1-sin(3*a-3.14)));
printf(" z2=%f",ctg((5/4)*3.14)+(3/2)*a);
scanf("\n");
}
(пишу на билдере, он вроде не распознает ctg, помогите исправить)

Последний раз редактировалось Stilet; 30.09.2011 в 21:30.
Cas01 вне форума Ответить с цитированием
Старый 30.09.2011, 21:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ctg((5/4)*3.14)
Можно заменить на
Код:
cos((5/4)*3.14)/sin((5/4)*3.14)
По-моему так и поступают...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.10.2011, 00:06   #3
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию

я так пробывал, щас попробывал ещё раз, но ответы в z1 и z2 разные, а должны быть одинаковые...
посмотрите плз, может я допустил ошибку при переводе этого примера на язык программирования...вот мой код:

Код:
 #include <math.h>
#include <stdio.h>
void main () {
float a;
printf("Vvedite a: \n");
scanf("%f",&a);
printf(" z1=%f",sin(3.14/2)+(3*a)/(1-sin(3*a-3.14)));
printf(" z2=%f",cos((5/4)*3.14)+((3/2)*a)/sin((5/4)*3.14)+((3/2)*a));
scanf("\n");
}
Cas01 вне форума Ответить с цитированием
Старый 01.10.2011, 04:24   #4
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

С какой стати два разных выражения должны быть равны?
На файлооменник не заходит. Скрин выложи.
TwiX вне форума Ответить с цитированием
Старый 01.10.2011, 08:08   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Cas01 Посмотреть сообщение
ответы в z1 и z2 разные, а должны быть одинаковые...
посмотрите плз, может я допустил ошибку при переводе этого примера на язык программирования
Допустил, да.

Во-первых, ты ошибся просто банально в скобках. Я не знаю, какое у тебя там задание, я просто прикинул, что ТАК это выглядеть НЕ ДОЛЖНО. Совершенно не удивительно, что ты ошибся - ты понаставил кучу лишних скобок.. Зачем? Например: (5/4)*3.14 - зачем тут скобки?? Согласись, больше не всегда лучше. Но если ты их поставишь правильно то все равно будет считаться НЕПРАВИЛЬНО. Потому что..

.. во-вторых, ты не учел разницу между целым делением (с остатком) и вещественным (с дробью). Дело в том, что в C/C++ оба эти действия обозначаются ОДИНАКОВО - слешем: "/". А различаются они по типу операндов. Если оба операнда ЦЕЛЫЕ - то производится деление нацело, а остаток просто отбрасывается, например:
12/5 = 2
3/4 = 0
В данном же случае тебе это не надо, ты просто считаешь значение дроби (хотя я не понимаю, почему бы тебе сразу не записать 5/4 как 1.25). Поэтому, чтобы деление было точным, надо писать не целые константы, а действительные. Это можно сделать, просто добавив точку, вот так:
12./5. = 2.4
3./4. = 0.75
Сечешь фишку?
Даю тебе полностью исправленный код. Советую провести эксперимент: убери точки при числовых константах (где деление) - увидишь разницу.
Код:
#include <math.h>
#include <stdio.h>
#define pi 3.1415926  // best practice

int main () {
  float a;
  printf("Vvedite a: \n");
  scanf("%f",&a);
  printf(" z1=%f\n", sin(pi/2.+3.*a)/(1.-sin(3.*a-pi)) );
  printf(" z2=%f\n", cos(5./4.*pi+a*3./2.)/sin(5./4.*pi+a*3./2.) );
  scanf("\n");
}
Ставить точки в константах при программировании на Си - это хорошая практика. Если этого не делать, можно нарваться на очень труднонаходимые ошибки. Например, a*3/4 не равно 3/4*a. Первое выражение будет равно a*0.75, а второе - всегда равно нулю, поскольку 3/4=0.

Еще одно: обрати внимание на то, как используется pi.
Успехов тебе.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 01.10.2011, 23:32   #6
Cas01
Форумчанин
 
Регистрация: 16.12.2010
Сообщений: 175
По умолчанию

спасибо огромное, расписал всё просто и понятно...только один вопрос: чем будет отличаться Void main от Int main ?
Cas01 вне форума Ответить с цитированием
Старый 01.10.2011, 23:46   #7
9i.
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 103
По умолчанию

int - возвращает значение! //полезно при проверке программы на нормальное завершение
void - не возвращает ничего!
9i. вне форума Ответить с цитированием
Старый 02.10.2011, 01:22   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

9i собвершенно прав, +1 (кстати, я забыл добавить тут возврат значения).
Только я хочу дополнить его ответ.
Когда программа завершает работу, она ДОЛЖНА вернуть операционной системе КОД ЗАВЕРШЕНИЯ. При этом 0 будет означать успешное завершение, а все остальное - код встреченной ошибки.

Как это использовать?
Во-первых, main() должна быть int.
Во-вторых, при нормальном выходе делай return 0. А если произошла ошибка (например, не был найден конфиг-файл) - тогда return 2 (это к примеру, номера ошибок разным событиям присвой сам).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в коде С Mr.Merso Помощь студентам 4 10.05.2011 00:52
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Ошибка в коде Cronos20 PHP 3 09.07.2010 23:31
ошибка в коде Pytnik Паскаль, Turbo Pascal, PascalABC.NET 45 25.05.2010 17:30
Ошибка в коде Bigtyoma Общие вопросы Delphi 9 10.06.2009 16:35