Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

leksev:

#include <iostream.h>main(){int i,j,a[3][4],b[3]; cout<<"Enter the test matrix:"<<endl;for(i=0;i<3;i++){for(j=0;j<4;j++)cin>>a[i][j]; cout<<endl;}for(i=0;i<3;i++){b[i]=0; for(j=0;j<4;j++)if(!(a[i][j]%2))b[i]++;}for(i=0;i<3;i++)cout<<"b["<<i+1<<"]="<<b[i]<<endl;getchar(); getchar();}

ТРОЛЬ,конечно большое спасибо,

но ты не мог бы эту же прогу и на С сделать.

Ссылка на комментарий
Поделиться на другие сайты

leksev:

но ты не мог бы эту же прогу и на С сделать
Елки-палки, а потом на каком? :g: Ладно переделка пустяковая...
#include <stdio.h>main(){int i,j,a[3][4],b[3]; printf("Enter the test matrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)scanf("%i",&a[i][j]); printf("\n");}for(i=0;i<3;i++){b[i]=0; for(j=0;j<4;j++)if(!(a[i][j]%2))b[i]++;}for(i=0;i<3;i++)printf("b[%i]=%i\n",i+1,b[i]);getchar(); getchar();}

core:

Внешне я у тебя тут ничего криминального не вижу, а на компе у меня сейчас ничего подходящего для прогона твоей программы не стоит :( .

nadi_scool2:

var a,b,c,d:integer;function nod(a,b:integer):integer;  begin if a mod b<>0 then nod:=nod(b,a mod b) else nod:=b end; procedure noc(a,b:integer; var d:integer); begin d:=a div nod(a,b)*b end; begin readln(a,b,c); noc(a,b,d); noc(d,c,d); writeln(d); readln end.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль

я по другому немного написала,ток у меня не идет,она скомпилировалась,числа вводятся,но ответ не считается,ставит курсор на процедуру для НОК(я там выделила))че не правильно? :g: :(

program nok3;

procedure NOD1(A,B,C:integer;var NOD,D:integer);

begin

while (a<>0) and (b<>0) do

if a>=b then a:=a mod b

else b:= b mod a;

D:=a+b;

while (D<>0) and (C<>0) do

if D>=C then D:=D mod C

else C:=C mod D;

NOD:=D+C;

end;

procedure NOK1(A,B,C,NOD,D:integer;var NOK,K:integer);

begin

K:=a*b div D;

NOK:=K*C div NOD

end;

Var NOD,NOK,D,K,A,B,C:integer;

begin

write('vvedite tri 4isla:');

readln(A,B,C);

NOD1(A,B,C,NOD,D);

writeln(NOD);

NOK1(A,B,C,D,NOK,K,NOD);

writeln(NOK);

end.

Ссылка на комментарий
Поделиться на другие сайты

nadi_scool2:

У тебя при вызове процедуры NOK1 на место параметра D подставляется NOK, равный в это время нулю, а затем на него делим. Тут программа и вылетает. Если будешь дальше отлаживать свой вариант, обрати еще внимание, что в процедуре NOD1 сначала D получается правильно, но при дальнейшем вычислении NOD по ходу вычисления D изменяется и при выходе из процедуры вычисленное в ее середине значение D будет уже подпорчено.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

опять ети битовые поля :g: Задание : в переменной char записано число. с помощью 4 битовых полей считать двуичный код числа и если в поле записано 00 - вывести оценку плохо, если 01 - удовлетворительно, 10 - хорошо. 11 - отлично.

Ссылка на комментарий
Поделиться на другие сайты

core:

Мне кажется, это для тебя уже должно быть как ежу с улиткой справиться. char однобайтовый, в него пакуются как битовые поля два полубайтовых целых... Не вижу, зачем тут тебе помощь. Полубайт, кстати, в старину имел свое название - ниббл.

P.S. Хотя... похоже, я не так понял условие. Не четырехбитовых полей, а четырех битовых полей. То есть в байт пакуются не два полубайтовых целых (строго говоря, беззнаковых целых), а четыре четвертьбайтовых, по два бита. Четверти байтов даже собственным именем не удостоили. Впрочем, труднее это задачу не делает.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

NOD я исправила,теперь он считается))а вот про НОК все равно не поняла,у меня для любых чисел пишет 0 ;) чет я совсем торможу,вот я переписала на 2 процедуры,правда незнаю зачем))

procedure NOK1(A,B,C,D:integer;var K:integer);

begin

if k<>0 then K:=a*b div D;

end;

procedure nok2(k,c,nod:integer;var nok:integer);

begin

NOK:=K*C div NOD

end;

ой чет я с именем накосячила))Тролль,сорри :bye1:

Ссылка на комментарий
Поделиться на другие сайты

nadi_scool2:

Задача затрагивает три области: теорию чисел, вычислительную математику и язык программирования Pascal.

Теория чисел тебе подскажет выражения для вычисления НОД и НОК трех чисел. Вычислительная математика скажет, почему лучше использовать, например, K:=a div D *b, а не K:=a*b div D.

Ну и знание Pascal поможет записать все это в виде, понятном для компьютера. Ты хорошо знаешь Pascal, а твои ошибки связаны с недостатком знаний по первому и второму пунктам, в чем тебя винить нельзя, ибо вам их и не давали.

Обучение у нас в основном сводится к бросанию в воду - способный научится плавать сам, а неспособного спасут доброжелатели или нанятые родителями (если они достаточно богаты) спасатели.

Разберемся в твоей задаче. Надо найти НОК трех чисел. Как его найти? Лезем в нормальные учебники и находим, что нужно выписать все простые множители чисел, посчитать количества их вхождений в разложение каждого из чисел... Помилуй Боже... Или, как сказано в Википедии

Можно формулировать правило нахождения Н. кратного ещё так: следует разложить данные количества на множители и, взяв каждого из этих множителей в наибольшей из тех степеней, в которых он входит в полученные разложения, перемножить между собой эти наибольшие степени. Но этот способ неудобен, т.к. гипотетически разложение числа на простые множители является алгоритмически сложной задачей (на предположении о её сложности строятся многие криптографические системы). Поэтому проще находить НОК по следующей формуле...
Впрочем, использовать статьи только на русском часто недостаточно. Статья на ту же тему в Википедии на английском гораздо полнее и прямо говорит
Because gcd(a, b) is a divisor of both a and b, it's more efficient to compute the LCM by dividing before multiplying
(в переводе: Поскольку НОД(a,b) является делителем и a, и b, более эффективно вычислять НОК делением ДО умножения).

Но это все хорошо для НОК двух чисел, а нам нужны три.

Лезем в теорию чисел, там находим, что

НОК(a,b,c) вычисляется как НОК(НОК(a,b),c), а сам НОК двух чисел вычисляется как ab/НОД(a,b)

(Мультипликативные полугруппы неотрицательных действительных чисел или, немного проще, Теоремы, облегчающие вычисление НОД и НОК).

Так как теорию чисел вы, скорее всего, не проходили, предполагается, что ты должна была доказать все это самостоятельно. Что тебе стоит изобрести основные теоремы теории чисел... :bye1:

Почему у тебя получается неправильно? Обычно легче написать свою программу, чем разобраться в чужой

А что такое положительное число? — взволновался чёрт. — И почему вы хотите, чтобы оно было целым?
( "Саймон Флегг и дьявол", Артур Порджес - кстати, прочти рассказик, мне он доставил удовольствие :( ),

но похоже, что ты пытаешься считать НОД сразу и для первого НОК, и для второго, которое в этот момент тебе еше неизвестно, поэтому одним из параметров для вычисления второго НОД используешь не первый НОК, а первый НОД, а это неправильно. Что получится, неясно, но видимо, что-то не то. То есть ты используешь неправильную формулу, а НОД сразу для трех чисел и считать нет смысла.

Возможно, ты бы могла вывести новые теоремы об использовании НОД трех чисел для вычисления НОК трех чисел, но у меня лично развивать теорию чисел нет никакого желания, тем более что мне хватает того, что я уже выяснил - как сводить вычисление НОК для трех чисел к вычислению НОК для двух чисел, а при этом нужен только НОД для двух чисел.

В итоге, если переделывать твою программу и выкинуть ненужные переменные, получается так:

program nok3;procedure NOD1(A,B:integer;var NOD:integer);  begin while (a<>0) and (b<>0) do if a>=b then a:=a mod b else b:= b mod a; NOD:=a+b; end;procedure NOK1(A,B:integer;var NOK:integer);  var NOD:integer; begin NOD1(A,B,NOD); NOK:=A div NOD *B; end;Var A,B,C,D:integer;beginwrite('vvedite tri 4isla:'); readln(A,B,C);NOK1(A,B,D); NOK1(D,C,D); writeln(D); Readlnend.

В принципе два вызова процедуры NOK1 можно было бы заменить одним, но тогда процедура NOK1 получается сложнее, так в ней надо одно и то же записывать два раза или вызывать NOK1 внутри себя еще раз - в любом случае проще дважды вызвать одного и того же джинна ;).

P.S. А процедуру NOD1 можно вообще выкинуть, записав ее текст внутри процедуры NOK1, тогда понадобится ввести в NOK1 пару вспомогательных переменных, чтобы не портить значения a и b.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль,спасибо тебе огромное :bye1: ))))оч помогло))даж не знаю как благодарить за такое подробное объяснение))) :bye1:

Ссылка на комментарий
Поделиться на другие сайты

помогите решить задание, так как я просто не понимаю его сути:

Написать функцию,которая за целым n>7 исчесляет два целых а и b, учитывая что 5а+3b=n, a a+b-минимальное.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте.

Не получается у меня одна задачка в паскале... на вычисление суммы членов ряда с определённым коэффицентом...((

Вот эта задача:

"Вычислить сумму ряда s(x) с точностью e=10^-3:

s(x)=-(1+x)^2+(1+x)^4/2-(1+x)^6/3+(-1)^n*(1+x)^2n/n"

Сам пытался что-то сделать, но постоянно получаю ноль в рез-те((:

program _;

var s,x,n,e,y,z,t,o,si:real;

begin

writeln ('vvedite x:');

readln(x);

n:=1;

e:=0.001;

si:=0;

y:=(1+x); z:=y*y; t:=-1; o:=y*y;

while abs(si-s)>=e do begin

s:=si;

si:=t*(z/n)+si;

z:=z*o;

n:=n+1;

t:=t*t;

end;

writeln('summa = ', s:1:3);

end.

Думаю для вас это не составит особого труда...

тьфу... не с "коэффициентом" а с "точностью"...

И вообще как надо понимать понятие "точность" в данном случае и вообще?!

Ссылка на комментарий
Поделиться на другие сайты

очередная проблемма.

Есть задача. Есть фаилы f1 и f2. f1 содержит произвольный текст разделеный пробелами и знаками припинания f2 содержит не более сорока слов разделенных запятыми. Эти слова образуют пары, каждое первое слово считается заменяемым каждое второе заменяющим найти в фаиле f1 все заменяемые слова и заменить их на заменяющие.

---

проблема начинатеся уже при открытие фаилов. Когда открываю один фаил, все нормально работает. а при добавлении в код открытия второго фаила прога даже не компилица.

ну то есть делаю примерно так

int main(array<System::String ^> ^args){setlocale(LC_CTYPE, "Russian");ofstream out_file("file1.txt");//запись в фаилout_file<<"один два один два один два";out_file.close();char s1[64];ifstream in_file("file1.txt");while (!in_file.eof){in_file>>s1;cout<<s1<<endl;}in_file.close();ofstream out_file("file2.txt");//запись в фаилout_file<<"два один два один два один";out_file.close();ifstream in_file("file2.txt");while (!in_file.eof){in_file>>s1;cout<<s1<<endl;}in_file.close();Console::ReadLine();return 0;}

Вобщем, помощь в решении задачи, очень нужна. Очень очень. Заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Добрый день! Столкнулся с проблемой, в написании лабораторной работы на ассемблере (masm).

Задание звучит так: Обчислить 4 значения функции: Y = 3 * log2(x(квадрат) +1), x изменяется от 0,2 с шагом 0,3.

Проблема заключается в получении log2. В математике я не силен :)

Вот отрезок кода:

			fld resfiadd const1fyl2x

где fld res это (x(квадрат) +1)

После команды fyl2x st(0) становится -NAN FFFF C0000000 00000000 ошибка...

Хелп плз!

Ссылка на комментарий
Поделиться на другие сайты

core:

за целым n>7 исчесляет два целых а и b
Это на украинском?

Чушь это всё. Минимальной суммы a+b не существует, она равна минус бесконечности, если брать целые числа. А если считать, что сумма a+b должна быть неотрицательна, то есть минимум равен нулю, то b=-a, 5a-3a>7, 2a>7; a=4, b=-4

А если еще считать, что целые a и b также должны быть неотрицательны, то решение также бросается в глаза: a=1, b=1. Зачем тут компьютер? Где ты учишься?

Чтобы что-то написать, переведем на "компьютерный" решение по третьему толкованию:

label m; var a,b,s,n:integer;

begin

n:=7; s:=0; repeat for a:=0 to s do if 5*a+3*(s-a)>n then goto m; inc(s) until false;

m: writeln('a=',a,' b=',s-a,' n=',5*a+3*(s-a)); readln

end.

Ответ будет, естественно, a=1, b=1.

Ссылка на комментарий
Поделиться на другие сайты

В том и дело - проблема как раз не в задании. А в его постановке. Я так понимаю что задается число n, которое может быть сумой 5a+3b, соответственно это 8(1,1), или 11(1,2), 13(2,1),16,(2,2),14(1,3),17(1,4),18(3,1), и т.д. И именно а и б нужно определить.

Ссылка на комментарий
Поделиться на другие сайты

core:

Ну тогда эта программа и будет определять a и b, только надо вводить нужное n.

А вообще, конечно, согласен, проблема в неграмотной постановке задачи, но - переписать условие я же не могу, надо идти к преподу и говорить, что он дурак в связи с его загруженностью в условие написанной им задачи, возможно, вкрались некоторые неточности, не позволяющие однозначно истолковать это условие.

Mike497:

У тебя то же самое. Сначала пусть будет ряд записан по-человечески. У тебя в этом ряду всего четыре члена, по сути это вообще не ряд, а многочлен.

А если в формуле и появятся многоточия (обычный способ записи рядов, хотя есть и другие), проследи, чтобы было ясно, конечный это ряд (многоточия только в середине ряда) или бесконечный (многоточия в середине и конце ряда). Если он конечный, то зачем нам точность - просто считаем весь ряд полностью. А если бесконечный, то что имеется в виду - относительная или абсолютная точность?

Я понимаю, что ты хотел получить ответы на эти вопросы у меня. Но я не могу изменять формулы и придумывать что-то другое, а не то, что написано.

В программе у тебя проблемы начинаются с того, что при первой же проверке в заголовке цикла у тебя разница s и si равна нулю, цикл ни разу не выполняется, поэтому что именно в нем написано, уже не имеет значения (хотя там тоже есть ошибки, например, t:=t*t после первого вычисления окажется равным 1 и знак потом менять уже не будет никогда).

А точность - это насколько может вычисленная величина отличаться от ее точного значения. И бывает она относительная (в долях точного значения) и абсолютная (возможная разница значений).

Ссылка на комментарий
Поделиться на другие сайты

DoctorG:

Не компилится скорее всего из-за того, что отсутствуют скобки в while (!in_file.eof())

Как-никак eof - метод.

Ссылка на комментарий
Поделиться на другие сайты

не помогло

4 -е ошибки

Ошибка 2 error C2088: <<: недопустимо для class c:\Users\ArtemG\Documents\Visual Studio 2008\Projects\503i\503i\503i.cpp 26

Ошибка 4 error C2088: >>: недопустимо для class c:\Users\ArtemG\Documents\Visual Studio 2008\Projects\503i\503i\503i.cpp 32

Ошибка 3 error C2370: in_file: переопределение; другой класс хранения c:\Users\ArtemG\Documents\Visual Studio 2008\Projects\503i\503i\503i.cpp 29

Ошибка 1 error C2370: out_file: переопределение; другой класс хранения c:\Users\ArtemG\Documents\Visual Studio 2008\Projects\503i\503i\503i.cpp 25

Ссылка на комментарий
Поделиться на другие сайты

Ну, у меня компилируется и выполняется, например, так:

#include <iostream.h>

#include <fstream>

int main()

{

std::ofstream out_file("C:\\file1.txt");

out_file<<"one two three four";

out_file.close();

char s1[64];

std::ifstream in_file("C:\\file1.txt");

while (!in_file.eof())

{

in_file>>s1;

cout<<s1<<endl;

}

in_file.close();

std::ofstream out_file2("C:\\file2.txt");

out_file2<<"twotwo";

out_file2.close();

std::ifstream in_file2("C:\\file2.txt");

while (!in_file2.eof())

{

in_file2>>s1;

cout<<s1<<endl;

}

in_file2.close();

getchar();

return 0;

}

Но у меня Dev-C++, на разных компиляторах могут быть (и обычно есть) некоторые отличия в тексте, тем не менее попробуй заменить во второй половине программы file на file2.

Ссылка на комментарий
Поделиться на другие сайты

http://foto.tut.by/albums/userpics/u/l/100...mal_1944199.jpg

вот такое условие задачи...

мот кто кинет правильный код?!

Ссылка на комментарий
Поделиться на другие сайты

Возвращаюсь к заданию с полями. Такой вопросик. Идет запись в структуру битовых полей.

struct bit {  x1:2; x2:2; x3:2;x4:2;} mark;void main(){clrscr();scanf ("%d",&mark);

Ввожу число 200. Его бинарный код : 11001000.

На

printf ("\n%d,%d,%d,%d",mark.x4,mark.x3,mark.x2,mark.x1);

такой результат:

-1,0,-2,0.

На число 250 результат: 11111010

-1,-1,-2,-2.

Значит 11 выводится как -1, 00 как 0, а 10 и 01 как -2. Как это понять? И как тогда различить 10 и 01 ?

Ссылка на комментарий
Поделиться на другие сайты

Mike497:

Это уже лучше. Теперь ряд хоть на ряд похож. Хотя не все замечания исчезли, можно хоть понять, что имелось в виду.

var n:integer; x,e,t,s:real;

begin

writeln ('vvedite x:'); readln(x);

n:=0; e:=0.001; t:=-sqr(1+x); s:=t;

while abs(t)>e do begin n:=n+1; t:=-t*sqr(1+x)*n/(n+1); s:=s+t end;

writeln('summa = ', s:1:3); readln

end.

Имей в виду, что ряд сходится только для значений x от 0 до -2. Если не хочешь, чтобы при вводе значений вне этого интервала программа вылетала, после ввода x введи проверку введенного значения и, если оно вне этого диапазона, выдай сообщение об этом.

Ссылка на комментарий
Поделиться на другие сайты

core:

Значит 11 выводится как -1, 00 как 0, а 10 и 01 как -2. Как это понять?
Целые числа со знаком представляются в компьютере обычно в так называемом дополнительном коде (это упрощает структуру арифметического устройства компьютера), в этом коде старший бит (крайний левый) служит признаком отрицательного числа. Но в отрицательных числах и остальные биты будут выглядеть иначе, поэтому если хочешь интерпретировать запись отрицательного числа "вручную", надо знакомиться с их представлением в дополнительном коде.

А у тебя в программе битовые поля интерпретируются именно как числа со знаком, и единица в их левом бите при выводе расшифровывается как признак отрицательного числа. Для положительных чисел дополнительный код совпадает с обычной записью двоичного числа (так называемым прямым кодом), а самый левый бит у них всегда равен нулю.

С расшифровкой беззнаковых целых чисел проще, они всегда представляются обычным прямым кодом, и левый бит у них используется как при обычной двоичной записи. Я же написал, надо определять битовые поля как беззнаковые целые. То есть так:

struct bit {unsigned x1:2,x2:2,x3:2,x4:2;} mark;

Обрати внимание, что перечисление должно идти через запятые, а не через двоеточия - иначе unsigned будет относиться только к x1.

Давать типу структуры имя (bit), кстати, необязательно, но ничему не мешает.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

гммм. Так и сделал. Тепер на 200(11001000) результат 3,0,2,0, на 220 - (11011100) - 3,1,3,0.

Хаха. Работает!!! Спасибки тебе Тролль большое!!!!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...