Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: где ошибка?  (Прочитано 89741 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Carrie Bradshaw
Гость
« : 17-10-2005 08:28 » 

вот вам задачка, Люди!

ввести значения 2х углов в градусах (целые числа, угол1>угол2). Вычислить значения sin. Результат решения задачи вывести на экран по образцу:
1) sin (уго1+угол2)=значение1
2) sin(угол1-угол2)=значени2
3) sin(угол1*угол2)=значения3
***задача решена***

сама пыталось. вот, что из этого вышло:  Жаль
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
   clrscr ();
   int a,b;
   double f1,f2,sin1,sin2,sin3;
      scanf ("%d%d",&a,&b);
      f1=a*M_PI/180;
      f2=b*M_PI/180;
if (f1>f2)
    {
    sin1=sin(f1+f2);
    sin2=sin(f1-f2);
    sin3=sin(f1*f2);
    clrscr();
    printf ("sin1(%d)\=%d\nsin2(%d)\nsin3(%d)\n***zadacha reshena***",sin1,sin2,sin3);
                    }
else (printf ("vvedennye znachenia ne udovletvoraut neobhodimym usloviam"));
}
запускаю ее, а на экране сразу "введенные значения не удовлетворяют". шо делать? :?
« Последнее редактирование: 27-10-2005 04:52 от MOPO3 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 17-10-2005 08:41 » 

убери условие  if (f1>f2)
 Улыбаюсь
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 17-10-2005 13:12 » 

У меня твоя прога проходит нормально. Только во время компиляции компилятор обругал  clrscr (); и M_PI. У меня они не были определены.
Ну и здесь явная ошибка
Код:
printf ("sin1(%d)\=%d\nsin2(%d)\nsin3(%d)\n***zadacha reshena***",sin1,sin2,sin3);
Ты просиш вывести на экран 4 целочисленных числа, даеш вывести 3 дробных числа. Компилятор это скушал. Но это явная логическая ошибка.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #3 : 18-10-2005 07:51 » 

У меня твоя прога проходит нормально. Только во время компиляции компилятор обругал clrscr (); и M_PI. У меня они не были определены.
Ну и здесь явная ошибка
Код:
printf ("sin1(%d)\=%d\nsin2(%d)\nsin3(%d)\n***zadacha reshena***",sin1,sin2,sin3);
Ты просиш вывести на экран 4 целочисленных числа, даеш вывести 3 дробных числа. Компилятор это скушал. Но это явная логическая ошибка.
я это уже давно исправила. и вообще, немножко поколдовала и у меян все теперь в порядке. спасибки всем за участие. будут еще трабл - опять загляну.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 18-10-2005 07:53 » 

Шаманский бубен наверно был большой Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #5 : 26-10-2005 08:25 » new

с предыдущей программкой все доделала. вот вам новенькая. говорю сразу: если помогаете, то пипши программку прям от и до, со всеми включаемымми файлами, слэшами и даже запятушочками. поехали:
"ввести три числа a, b, c. если нельзя построиить треугольник с такими длинами сторон, то напечатать 0, иначе напечатать 3, 2 или 1 в зависимости от того, равносторонний это треугольник, равнобедренный или к.-л. иной. Представить схему алгоритма."P.S. кстати, не думайте, что сама  ничего не далаю. как раз-таки, наоборот. просто ошибки периодически дурацкие...
Записан
Carrie Bradshaw
Гость
« Ответ #6 : 27-10-2005 03:28 » 

ага! все теперь молчать будут. все ленивые. ну тогда, капризные Вы мои, ответьте вот на что: как мне покорректнее ввести условие равносторонности, так как он в любом же случае будет являться частным случаем равнобедренности. вот например, когда вводишь 4 4 5, то он его правильно распознает - как равнобедренный, а когда уже 4 4 4 - тоже как равнобедренный. помогите... вот примерный вид программы:
Код:
#include <stdio.h>
#include <conio.h>
#include <values.h>
#include <limits.h>
#include <math.h>
#include <complex.h>
void main ()
   {
   clrscr ();
   int a,b,c;
   printf ("enter the three next meanings\n");
   scanf ("%d%d%d",&a,&b,&c);
      {
      if (a<b+c && b<a+c && c<a+b) printf ("this triangle exists\n");
      else printf ("thi triangle doesn't exist\n0\n");
          {
           if (a==b||b==c||c==a) printf ("2\n");
           else printf ("1\n");
               {
    if (a==b==c) printf ("3\n");
    }
           }
      }
   }
« Последнее редактирование: 19-12-2007 21:35 от Алексей1153++ » Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #7 : 27-10-2005 04:51 » 

Carrie Bradshaw, пожалуйста пользуйся тэгами code для оформления кода.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 27-10-2005 05:06 » 

просто равносторонний - он тоже равнобедренный, надо поменять местами проверу условия - сначала на a==b==c, потом проверять на равнобэдрэнный
Записан

Carrie Bradshaw
Гость
« Ответ #9 : 27-10-2005 08:48 » 

а есть к.-н. оператор, помимо breakа и returnа, что, например, когда значения подходят под одно из условий, то дальше уже не сканировалось?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 27-10-2005 09:15 » 

можно так:

for(;Ага
{

  break;
}

в любом месте можно выйти через break . Главное не забыть в конце, иначе - зациклится.


А если есть вложенные форы, то можно такие "скобки" :

try
{
  код;

   throw 0; //это заставит выйти в любом случае

  код;

}
catch(...)
{
}
Записан

Vadim Mc
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 27-10-2005 09:54 » 

я тоже новичек, если не секрет это на чем пишется - С или С++, для какого компилятора? Просто у либерти идет чистый С++, у Страуструпа идет код как на С так и на С++
« Последнее редактирование: 27-10-2005 13:56 от NL » Записан

"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 27-10-2005 12:56 » 

Можно сделать так
Код:
#include <stdio.h>
#include <conio.h>
#include <values.h>
#include <limits.h>
#include <math.h>
#include <complex.h>
void main ()
{
   clrscr ();
   int a,b,c,co;
   printf ("enter the three next meanings\n");
   scanf ("%d%d%d",&a,&b,&c);
   if (a<b+c && b<a+c && c<a+b)
   {
   printf ("this triangle exists\n");
   co=0;
   if (a==b) co++;
   if (b==c) co++;
   if (c==a) co++;
   switch (co)
   {
   case 0:
printf ("1\n");
break;
   case 1:
printf ("2\n");
break;
   case 3:
printf ("3\n");
break;
   }

   }
   else printf ("thi triangle doesn't exist\n0\n");
}
Смысл такой, считаем вообше сколько равенств есть. И исходя из этого решаем какой это треугольник.
« Последнее редактирование: 19-12-2007 21:37 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 27-10-2005 17:10 » 

Finch, оригинально. Такие методы надо брать на вооружение.
Записан

ещё один вопрос ...
Carrie Bradshaw
Гость
« Ответ #14 : 28-10-2005 17:02 » 

всё это, безусловно, хорошо, и я всем вам очень благодарна, но вот в самом конце программки, где else (не сущ-ет треуг-к) запихан в самый ее конец, некорректно. обзавем так. я смама пыталась уже так сделать: компиллятор выдает это за ошибку, хотя логически это очень даже правильнои граммотно структурировано получается. вот последняя моя версия программы:
Код:
#include <stdio.h>
#include <conio.h>
#include <values.h>
#include <limits.h>
#include <math.h>
#include <complex.h>
void main ()
    {
    clrscr ();
    int a,b,c;
    printf ("enter the three next meanings\n");
    scanf ("%d%d%d",&a,&b,&c);
        {
        if (a<b+c && b<a+c && c<a+b) printf ("this triangle exists\n");
            {
            if (a==b && b==c && c=a) printf ("3\n");
            if (a==b || b==c || c==a) printf ("2\n");
            else printf ("1\n");
            }
        else printf ("this triangle doesn't exist\n0\n");
        }
    }
так что торжественно объявляю проблему нерешенной!
« Последнее редактирование: 19-12-2007 21:40 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 28-10-2005 17:06 » 

Код:
            if (a==b && b==c && c=a) printf ("3\n");
Код:
        if (a<b+c && b<a+c && c<a+b) printf ("this triangle exists\n");
            {
   
В этих строчках маленький жучок Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #16 : 28-10-2005 17:19 » 

и какой же, извольте полюбопытствовать?..  :nono:
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 28-10-2005 17:26 » 

следует писать:
Код:
           if (a==b && b==c && c==a) printf ("3\n");
c=a говорит о том что переменной "c" присвоится "a". Этот глюк не будет никак отображаться на работе программы. Так что этот глюк малокритичен.
Код:
       if (a<b+c && b<a+c && c<a+b)
            {
              printf ("this triangle exists\n");
Этот глюк уже критичный. Так как после условия стоит только одно действие. И блог действий идуший за условием уже не будут принадлежать условию. После блога у тебя стоит сразу else что по симантике не допускается.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #18 : 28-10-2005 17:36 » 

у тебя тоже, если мне память не изменяет, условие так стояло
Код:
if (a<b+c && b<a+c && c<a+b)
   {
   printf ("this triangle exists\n");
или я что-то путаю?..  Быть такого не может
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #19 : 28-10-2005 17:47 » 

Э ... Что то я не допонял. Что ты имееш ввиду? Прости мою непонятливость.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Carrie Bradshaw
Гость
« Ответ #20 : 28-10-2005 17:52 » 

да нет. все нормально. может это я чего недогоняю: просто подними свои глазки наверх, где ты мне свою программу предлагал с кейсами и ты ту же увидишь этот фрагмент: просто там у тебя между if и else еще одноусловие стоит, хоть и с фигурнаыми скобочками,..
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #21 : 28-10-2005 17:58 » 

Где ты здесь видиш ошибку?
Код:
  if (a<b+c && b<a+c && c<a+b)
   {
         printf ("this triangle exists\n");
         co=0;
         if (a==b) co++;
         if (b==c) co++;
         if (c==a) co++;
         switch (co)
        {
          case 0:
               printf ("1\n");
               break;
          case 1:
              printf ("2\n");
              break;
           case 3:
               printf ("3\n");
              break;
          }

   }
   else printf ("thi triangle doesn't exist\n0\n");

Case часть можно переписать так кстати:
Код:
co++;
co-=((co & 4) >> 2);
printf("%d \n", co);
« Последнее редактирование: 19-12-2007 21:41 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #22 : 28-10-2005 18:03 » 

Кстати, твоя программа будет печатать в случае равностороннего треуголька:
Цитата
this triangle exists
3
2
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 28-10-2005 18:16 » 

Carrie Bradshaw, так у Finch'а не так как у тебя Улыбаюсь
Код:
if (a<b+c && b<a+c && c<a+b) printf ("this triangle exists\n"); // Вот тут ошибка
            {
            if (a==b && b==c && c=a) printf ("3\n");
            if (a==b || b==c || c==a) printf ("2\n");
            else printf ("1\n");
            }
        else printf ("this triangle doesn't exist\n0\n");
        }


Если отформатировать сдвигами, сразу станет видно, что скобочку надо переставить
Код:
if (a<b+c && b<a+c && c<a+b)
          /*{ вот тут*/  printf ("this triangle exists\n");       // а скобка должна быть в этой строке
            {    // а здесь соответственно убрать
            if (a==b && b==c && c=a) printf ("3\n");
            if (a==b || b==c || c==a) printf ("2\n");
            else printf ("1\n");
            }
        else printf ("this triangle doesn't exist\n0\n");
        }
По идее и компилятор должен тебе об этом сообщить.

Finch, тебе респект, красиво решил задачку. В который раз убеждаюсь, что С - язык неограниченных возможностей Улыбаюсь
« Последнее редактирование: 19-12-2007 21:42 от Алексей1153++ » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #24 : 28-10-2005 18:21 » 

Scorp__) В этом месте компилятор ничего не должен сообшать. Никто тебе не запрешает открывать блок, где тебе вздумается. Ты можеш открывать и закрывать блок хоть в каждой строчке. Просто смысла в этом нету. А вот где действительно компилятор будет ругаться, это оператор else без if. Симантика языка такое не позволяет.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 28-10-2005 18:32 » 

Finch, я про else и говорил Улыбаюсь Видимо не очень внятно Улыбаюсь
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Carrie Bradshaw
Гость
« Ответ #26 : 03-11-2005 09:25 » 

так-с. с предыдущей я уже расправилась так что вот Вам новая пища для мозгов:  Отлично

вычислить значения функции F(x) на заданном интервале [a,b] с шагом step с точностью до m знаков после запятой. Результат оформить в виде таблицы. Интервал вычислений и шаг задается с клавиатуры. Прототипы математичнских функций находятся в заголовочном файле math.h. Представить схему алгоритма.
f(x)=(1+e"в степени x")/("корень квадратный из"(x+1))
[-0.9,1]
m=4
Записан
nikedeforest
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #27 : 03-11-2005 16:34 » 

Цитата
так-с. с предыдущей я уже расправилась
Хм, а я думал с ней Finch расправился Улыбаюсь

Не знаю, правильно ли я понял функцию, которую ты хочешь вычислять, чуть  что, сама подправишь.
Не делал проверки корректности задания интервалов вычисления.
Код:
#include "math.h"
#include "stdio.h"
#include "conio.h"
#include "iostream.h"
double around(double x, long int m)
{
long int x1=x*m;
if((x-x1)>=0.5)
{ return (((double)x1+1)/m);}
else
{
return ((double)x1/m);
}

}
double func_return(double x)
{
return ((1+pow(exp(x),x))/sqrt(x+1));
}

int main()
{
clrscr();
double b1, b2, step;
int m;
cout<<"input first boundary\n";
cin>>b1;
cout<<"\ninput second boundary\n";
cin>>b2;
cout<<"\ninput step\n";
cin>>step;
cout<<"\ninput punctuality\n";
cin>>m;
if(fabs(b2-b1)<step)
{
cout<<"Step is big";
getch();
return 0;
}

cout<<"\n==============================\n";
for(double x=b1;x<=b2;x+=step)
{
cout<<x<<"|";
cout<<around(func_return(x),pow(10,m))<<"|\n";

}

return 0;
}
Записан

ещё один вопрос ...
Carrie Bradshaw
Гость
« Ответ #28 : 09-11-2005 20:15 » 

неее... я лучше по-своему:  Ага
Код:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main ()
{
       clrscr();
       float a,b,x,y,step;
       printf("Enter the interval of argument's changing\t");
       scanf("%f%f",&a,&b);
       printf("Enter with which step\t");
       scanf("%f",&step);
       printf("\nx\tf(x)\n");
       for(x=a;x<=b;x+=step)
    {
       y=1+exp(x)/sqrt(x+1);
       printf("%.4f\t%.4f\n",x,y);

    }
       printf("\nTHE END");
}
[code\]
« Последнее редактирование: 19-12-2007 21:43 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #29 : 10-11-2005 06:31 » 

(не буду новую тему создавать, спрошу сюда : )

туплю с утра над простой вещью:

имеется статический массив arr, нужно объявить указатель p, с помощью которого можно было бы обращаться к элементам массива так же, как и через имя массива:
Код:
const int arr[][3]={{1,2,3}, {5,6,7}, ...};

??? p=arr;

p[i][j]==arr[i][j];

что поставить вместо вопросов? int** не катит! Улыбаюсь
Записан

Страниц: [1] 2 3 4   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines