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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2018, 00:32   #1
dastreba
Пользователь
 
Регистрация: 29.11.2017
Сообщений: 63
По умолчанию Что-то не так с программой

Код:
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int n,i;
    double R,S;
    printf("Write here: ");
    scanf("%d",&n);
S = 0;
R = 0;
for (i=1;i<=n;i++)
R=R+sin(i);
S=S+1/R;
 printf("result: %d.",S/10/8);
 
    return 0;
Суть проблемы- когда вписываю 5,то нужно чтоб вышло 8.84,а выдает число в размере 90к

Переделывал с паскаля-

Код:
program Project4_2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var
  n,i:integer;
  R,S:double;
 
begin
readln(n);
S:=0;
R:=0;
for i:=1 to n do begin
  R:=R+sin(i);
  S:=S+1/R;
  end;
writeln(S:10:8);
readln;
end.
dastreba вне форума Ответить с цитированием
Старый 24.05.2018, 00:46   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

а синус то вроде как в радианах считается. Если i это градусы то их надо перевести в соответствующие единицы.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 24.05.2018, 03:49   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
printf("result: %d.",S/10/8);
Цитата:
writeln(S:10:8);
Я уже забыл паскаль, но там у вас, помоему, форматированый вывод. А вот для С вы написали 2 деления числа.

Вернее что-то типа (а точнее читайте справку принтф, по памяти тоже не тяну)

Цитата:
printf("result: %02.8d",S);
Цикл у вас
Цитата:
for (i=1;i<=n;i++)
R=R+sin(i);
S=S+1/R;
содержит 1 строку (в паскале 2), верно так

Цитата:

for (i=1;i<=n;i++)
{
R=R+sin(i);
S=S+1/R;
}
Совет - пользуйтесь IDE, с автоформатированием кода - она вам расставит все отступы и косяк сразу будет заметен глазом.

Последний раз редактировалось alexzk; 24.05.2018 в 03:53.
alexzk вне форума Ответить с цитированием
Старый 24.05.2018, 07:48   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А что за цель у программы? Спрашиваю потому, что в 146% случаев будет быстрее и проще написать всё с нуля, чем переводить с другого языка.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 24.05.2018, 08:35   #5
dastreba
Пользователь
 
Регистрация: 29.11.2017
Сообщений: 63
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
А что за цель у программы? Спрашиваю потому, что в 146% случаев будет быстрее и проще написать всё с нуля, чем переводить с другого языка.
нужно найти натуральный n

1/(sin 1)+1/(sin1+sin2)....1/(sin1+sin2...+sinn)
dastreba вне форума Ответить с цитированием
Старый 24.05.2018, 08:42   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от dastreba Посмотреть сообщение
нужно найти натуральный n
ты там бухой, штоли? он жэж с клавы вводится!
Код:
scanf("%d",&n);
Если таки надо найти сумму, то вот:

Код:
// pascal
function shit_happens(n: DWORD): double;
var
  den: double;
  idx: DWORD;
begin
  result:= 0;
  den:= 0;

  for idx:= 1 to n do
    begin
      den:= den + sin(idx);
      result:= result + 1 / den;
    end;
end;
Код:
// C/C++
double shit_happens(DWORD n)
{
  double den = 0, sum = 0;
  
  for (double idx = 1.0; idx <= (double)n; idx += 1.0)
  {
    den += sin(idx);
    sum += 1 / den; 
  }

  return sum;
}
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 24.05.2018 в 08:59.
min@y™ вне форума Ответить с цитированием
Старый 24.05.2018, 08:42   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
нужно найти натуральный n
А чего задаешь этот n, если его найти надо? И для какого условия найти?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.05.2018, 09:08   #8
dastreba
Пользователь
 
Регистрация: 29.11.2017
Сообщений: 63
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А чего задаешь этот n, если его найти надо? И для какого условия найти?
Для вот такого условия
1/(sin 1)+1/(sin1+sin2)....1/(sin1+sin2...+sinn)
dastreba вне форума Ответить с цитированием
Старый 24.05.2018, 09:11   #9
dastreba
Пользователь
 
Регистрация: 29.11.2017
Сообщений: 63
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
ты там бухой, штоли? он жэж с клавы вводится!
Код:
scanf("%d",&n);
Если таки надо найти сумму, то вот:

Код:
// pascal
function shit_happens(n: DWORD): double;
var
  den: double;
  idx: DWORD;
begin
  result:= 0;
  den:= 0;

  for idx:= 1 to n do
    begin
      den:= den + sin(idx);
      result:= result + 1 / den;
    end;
end;
Код:
// C/C++
double shit_happens(DWORD n)
{
  double den = 0, sum = 0;
  
  for (double idx = 1.0; idx <= (double)n; idx += 1.0)
  {
    den += sin(idx);
    sum += 1 / den; 
  }

  return sum;
}
Я конечно извиняюсь,но такого мы еще не учили.
Данная программа была сделана правильно в паскале
Код:
var
  n,i:integer;
  R,S:double;
 
begin
readln(n);
S:=0;
R:=0;
for i:=1 to n do begin
  R:=R+sin(i);
  S:=S+1/R;
  end;
writeln(S:10:8);
readln;
end.
А нужно было переделать в си и где-то я допустил ошибку в написании.
Я думаю в этой строчке-
Код:
printf("result: %d.",S/10/8)
,т.к я тут написал деление,а в паскале было
Код:
writeln(S:10:8);
dastreba вне форума Ответить с цитированием
Старый 24.05.2018, 09:25   #10
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от dastreba Посмотреть сообщение
Я конечно извиняюсь,но такого мы еще не учили.
Данная программа была сделана правильно в паскале
Код:
var
  n,i:integer;
  R,S:double;
 
begin
readln(n);
S:=0;
R:=0;
for i:=1 to n do begin
  R:=R+sin(i);
  S:=S+1/R;
  end;
writeln(S:10:8);
readln;
end.
А нужно было переделать в си и где-то я допустил ошибку в написании.
Я думаю в этой строчке-
Код:
printf("result: %d.",S/10/8)
,т.к я тут написал деление,а в паскале было
Код:
writeln(S:10:8);
Я же писал выше

http://www.programmersforum.ru/showp...64&postcount=3

там не только это
alexzk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинка в шапке не двигается, что с style.ss не так?или что? Redass HTML и CSS 7 09.11.2016 17:48
Помогите плиз .Что не так с программой? Не выводить результат на экран Максим01101 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 25.09.2016 16:50
что не так с программой? Kuroi Общие вопросы C/C++ 4 17.05.2015 21:20
Обработка типизированного файла (Подскажите, что не так с программой в Delphi?) vladimir412 Общие вопросы Delphi 5 06.05.2014 11:13
что не так с программой Juli) Паскаль, Turbo Pascal, PascalABC.NET 5 04.06.2013 08:23