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 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 17-10-2005 08:41 » |
|
убери условие if (f1>f2)
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #4 : 18-10-2005 07:53 » |
|
Шаманский бубен наверно был большой
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #5 : 26-10-2005 08:25 » |
|
с предыдущей программкой все доделала. вот вам новенькая. говорю сразу: если помогаете, то пипши программку прям от и до, со всеми включаемымми файлами, слэшами и даже запятушочками. поехали: "ввести три числа 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
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #7 : 27-10-2005 04:51 » |
|
Carrie Bradshaw, пожалуйста пользуйся тэгами code для оформления кода.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 27-10-2005 05:06 » |
|
просто равносторонний - он тоже равнобедренный, надо поменять местами проверу условия - сначала на a==b==c, потом проверять на равнобэдрэнный
|
|
|
Записан
|
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #9 : 27-10-2005 08:48 » |
|
а есть к.-н. оператор, помимо breakа и returnа, что, например, когда значения подходят под одно из условий, то дальше уже не сканировалось?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 27-10-2005 09:15 » |
|
можно так: for(; { break; } в любом месте можно выйти через break . Главное не забыть в конце, иначе - зациклится. А если есть вложенные форы, то можно такие "скобки" : try { код; throw 0; //это заставит выйти в любом случае код; } catch(...) { }
|
|
|
Записан
|
|
|
|
Vadim Mc
|
|
« Ответ #11 : 27-10-2005 09:54 » |
|
я тоже новичек, если не секрет это на чем пишется - С или С++, для какого компилятора? Просто у либерти идет чистый С++, у Страуструпа идет код как на С так и на С++
|
|
« Последнее редактирование: 27-10-2005 13:56 от NL »
|
Записан
|
"Теория теорией, но сточки зрения инженера-практика никакая, даже самая элегантная методология, предлагаемая учеными, не стоит и ломаного гроша, если она не помогает в построении реальных, работающих систем." @ Гради Буч
|
|
|
Finch
Спокойный
Администратор
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
|
|
« Ответ #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
Спокойный
Администратор
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
Спокойный
Администратор
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #19 : 28-10-2005 17:47 » |
|
Э ... Что то я не допонял. Что ты имееш ввиду? Прости мою непонятливость.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Carrie Bradshaw
Гость
|
|
« Ответ #20 : 28-10-2005 17:52 » |
|
да нет. все нормально. может это я чего недогоняю: просто подними свои глазки наверх, где ты мне свою программу предлагал с кейсами и ты ту же увидишь этот фрагмент: просто там у тебя между if и else еще одноусловие стоит, хоть и с фигурнаыми скобочками,..
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #22 : 28-10-2005 18:03 » |
|
Кстати, твоя программа будет печатать в случае равностороннего треуголька: this triangle exists 3 2
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Scorp__)
Молодой специалист
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #24 : 28-10-2005 18:21 » |
|
Scorp__) В этом месте компилятор ничего не должен сообшать. Никто тебе не запрешает открывать блок, где тебе вздумается. Ты можеш открывать и закрывать блок хоть в каждой строчке. Просто смысла в этом нету. А вот где действительно компилятор будет ругаться, это оператор else без if. Симантика языка такое не позволяет.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Scorp__)
Молодой специалист
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
|
|
« Ответ #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++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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** не катит!
|
|
|
Записан
|
|
|
|
|