Тролль Опубликовано 12 декабря, 2007 Жалоба Поделиться Опубликовано 12 декабря, 2007 (изменено) neprogramist: по условию мы вводим две матрицы. а в задаче вводится одна. и он почему то не заменяет у матрицы отрицательные числа на единицу. не могли бы вы как нибудь внедрить туда вторую матрицу для выполнения условия задачи. Нам никто не мешает обработать вторую, а если хотим, и третью и т.д. матрицы, просто запустив программу еще раз. В программу вторую матрицу внедрять совершенно ни к чему, ей там нечего делать. В одной и той же матрице можно заменять значения элементов сколько угодно раз, она не изнашивается ;) . Сейчас запуск ввода и обработки новой матрицы осуществляется просто повторным запуском программы, так, по-моему, удобнее. Но если кажется лучше программно зациклить работу программы для обработки только двух определенных матриц, это очень легко. Чтобы программа в единственном запуске требовала ввести сначала матрицу (5,6), а потом (7,8), надо строку Write(' m=');ReadLn(m);Write(' n=');ReadLn(n); (седьмую снизу) заменить на m:=5; n:=6; repeat а строку ReadLn (вторую снизу) на m:=m+2; n:=n+2; until m>7; ReadLn он почему то не заменяет у матрицы отрицательные числа на единицу.У меня заменяет. На каком примере не заменяет? Возможно, в примере половина или меньше первых элементов строк матрицы не были простыми числами, в этом случае, по условию, замена отрицательных элементов на единицы не должна осуществляться. По первой задаче. Текст-то может быть и с запятыми и с пробелами, а вот слова? "аааа,бббб сссс" - тут сколько слов? По первому определению - три, по второму - два. P.S. Но если нужно "внедрить" в программу вторую матрицу, то могу сделать и вариант программы, в которой одновременно будут содержаться две матрицы. Текст программы изменится в основном с помощью копирования и вставки, так что долго трудиться не придется :g: . Единственное, делать что-то, в чем не видно смысла, неинтересно. Но с учебными заданиями такое бывает ;) . Изменено 12 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 12 декабря, 2007 Жалоба Поделиться Опубликовано 12 декабря, 2007 вторую задачу я переделал и все пошло как надо... Спасибо!!! но по поводу первой задачи я сам догнать не могу... походу предложение типа ааа, бббб имеет два слова ; а бббб,аааа одно.. вот исходя из этого и напишите мне пожалуйста программу... :g: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 12 декабря, 2007 Жалоба Поделиться Опубликовано 12 декабря, 2007 program lab7; type t=array[1..10,1..10] of integer; var i,j,m,n:integer; a:t; function P(k:integer):boolean; var i:integer; begin if k>1 then begin P:=true; for i:=2 to trunc(sqrt(k+1)) do if k mod i = 0 then begin P:=false; break end end else P:=false end; procedure Q(m,n:integer;var a:t); var i,j,s:integer; begin s:=0; for i:=1 to m do if P(a[i,1]) then Inc(s); if s>m div 2 then for i:=1 to m do for j:=1 to n do if a[i,j]<0 then a[i,j]:=1; end; begin m:=5; n:=6; repeat for i:=1 to m do for j:=1 to n do begin Write('a[',i:2,',',j:2,']='); ReadLn(a[i,j]) end; Q(m,n,a); for i:=1 to m do begin for j:=1 to n do Write(a[i,j]:7); WriteLn end; m:=m+2; n:=n+2; until m>7; readln end. я все по поводу задачи с матрицами... можно ли зделать так чтобы программа запрашивала ввести сразу две матрицы а потом только выдавала ответ? причем в ответе она отображала и старые матрицы(введенные) и новые(получившиеся). а если меньше половины строк начинается с простого числа то вывести сообщение об этом (типа меньше половины строк начинается с простого числа !!!) Исправте пожалуйста :rolleyes: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 12 декабря, 2007 Жалоба Поделиться Опубликовано 12 декабря, 2007 Огромное спасибо Тролль за сделанную задачу :rolleyes: Помоги пожалуста с модульным програмированием там немного посложнее Вот задание Даны векторы A[10], B[18]. У каждого вектора, компоненты которого не образуют неубывающей последовательности, отрицательные компоненты заменить максимальным элементом. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 12 декабря, 2007 Жалоба Поделиться Опубликовано 12 декабря, 2007 (изменено) neprogramist: я все по поводу задачи с матрицами... можно ли зделать так чтобы программа запрашивала ввести сразу две матрицы а потом только выдавала ответ?причем в ответе она отображала и старые матрицы(введенные) и новые(получившиеся). а если меньше половины строк начинается с простого числа то вывести сообщение об этом (типа меньше половины строк начинается с простого числа !!!) Уф... И еще изложила бы общую теорию бесконечных автоматов в четырех рифмованных строчках :rolleyes: (пример взял у Лема). Имей в виду, в последний раз пишу ;) По-моему, тебе скоро понадобится штатный программист... Пишется программа все-таки заметно дольше, чем обычный текст. uses crt;type t=array[1..10,1..10] of integer;var b,c:t;function P(k:integer):boolean; var i:integer;begin if k>1 then begin P:=true; for i:=2 to trunc(sqrt(k+1)) do if k mod i = 0 then begin P:=false; break end end else P:=false end;procedure Q(m,n:integer;var a:t); var i,j,s:integer;begin s:=0; for i:=1 to m do if P(a[i,1]) then Inc(s); if s>m div 2 then begin for i:=1 to m do for j:=1 to n do if a[i,j]<0 then a[i,j]:=1;WriteLn('The matrix ',m:1,'x',n:1,' is changed!') endend;procedure Input(m,n:integer;var a:t); var i,j:integer; begin for i:=1 to m dofor j:=1 to n do begin Write('a[',i:2,',',j:2,']='); ReadLn(a[i,j]) end;end; procedure Output(m,n:integer;var a:t); var i,j:integer; begin for i:=1 to m do begin for j:=1 to n do Write(a[i,j]:7); WriteLn end;end;begin textmode(259);WriteLn('Matrix 5x6 - input'); Input(5,6,b); WriteLn;WriteLn('Matrix 7x8 - input'); Input(7,8,c); WriteLn;ClrScr;WriteLn('Old matrix 5x6 - output'); Output(5,6,b); WriteLn;WriteLn('Old matrix 7x8 - output'); Output(7,8,c); WriteLn;Q(5,6,b); Q(7,8,c); WriteLn;WriteLn('New matrix 5x6 - output'); Output(5,6,b); WriteLn;WriteLn('New matrix 7x8 - output'); Output(7,8,c); WriteLn;ReadLnend. Вторая программа: походу предложение типа ааа, бббб имеет два слова ; а бббб,аааа одно.. вот исходя из этого и напишите мне пожалуйста программу... Без волшебного слова точно бы уже не взялся... ;) То есть запятая перед пробелом считается обычным знаком препинания, вместе с пробелом разделяющей слова. ОК. var a,s,z:string; p:set of char; i,j,k,l,q:integer; f:boolean;begink:=0;s:='';z:=''; WriteLn('Text=');ReadLn(a);WriteLn; a:=a+' ';for i:=1 to length(a) doif a[i]<>' ' then k:=k+1 else { end of the word } beginif a[i-1]=',' then q:=i-2 else q:=i-1;f:=true; p:=[]; for j:=i-k to q do begin if a[j] in p then f:=false; Include(p,a[j]) end;if f then begin for j:= i-k to i do s:=s+a[j]; if length(z)=0 then begin for j:=i-k to q do if a[j]in['0'..'9'] then z:=z+a[j] else begin z:='';break end end end;k:=0; end;WriteLn(s);if length(z)<>0 then z:=z+'0';WriteLn('10x number: ',z);ReadLnend. Trueman: Это из той же оперы, что у neprogramist'а ? Ты случайно не у того же преподавателя учишься? Опять нельзя обрабатывать последовательно, а надо параллельно? Напоминает мне историю о человеке, у которого кошка ходила гулять через дыру в заборе, а когда у нее родились котята, он проделал для них в заборе дополнительные дыры, рядом с дырой для кошки... Та же логика. И даже задание очень похоже, только не матрицы, а векторы, и вместо проверки на простоту чисел проверка на ненеубывание... :bye1: :D type t=array[1..20] of real;var b,c:t;function P(n:integer; a:t):boolean; var i:integer; begin P:=false;for i:=2 to n do if a[i]<a[i-1] then begin P:=true;break end end;procedure Q(n:integer; var a:t); var i:integer;m:real; begin if P(n,a) then begin m:=a[1]; for i:=2 to n do if a[i]>m then m:=a[i];for i:=1 to n do if a[i]<0 then a[i]:=m end end;procedure Input(n:integer; var a:t); var i:integer; begin for i:=1 to n do begin Write('a[',i:2,']='); ReadLn(a[i]) end end; procedure Output(n:integer; var a:t); var i:integer; begin for i:=1 to n do Write(a[i]:10:3); WriteLn end;begin WriteLn('Vector10 - input'); Input(10,b); WriteLn('Vector18 - input'); Input(18,c);WriteLn;WriteLn('Old vector10 - output'); Output(10,b);WriteLn('Old vector18 - output'); Output(18,c);Q(10,b); Q(18,c); WriteLn('New vector10 - output'); Output(10,b);WriteLn('New vector18 - output'); Output(18,c);ReadLnend. Изменено 12 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 13 декабря, 2007 Жалоба Поделиться Опубликовано 13 декабря, 2007 Спасибо! Я и Trueman с одного вуза :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
lapyx Опубликовано 13 декабря, 2007 Жалоба Поделиться Опубликовано 13 декабря, 2007 Привет всем я был бы очень признателен если бы вы уважаемые постояльцы этого форума помогли в решении следующей задачи Pascal Даны массивы Х[15], Z[20,15] 15 2 15 получить: ∑ X B ∑ Z[i,j],i=1 to 20 i-1 i-1 вычисльть: ∑ (b-3) i Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
lapyx Опубликовано 14 декабря, 2007 Жалоба Поделиться Опубликовано 14 декабря, 2007 Pascal Даны массивы Х[15], Z[20,15] получить: i-1∑15X, B i-1∑15 Z[i,j],i=1 to 20 вычисльть: i∑ (b-3) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 15 декабря, 2007 Жалоба Поделиться Опубликовано 15 декабря, 2007 Все сесместр кончаеться :blush2: и последняя задача которую я попрошу сделать это задача про строки вот задание: Общая постановка задачи для всех вариантов :blush2: Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования. И собствеенно мой вариант :blush2: 16. Сформировать новую строку из слов, состоящих только из латинских букв, и длиной не более 7 литер. Все строчные буквы в новой строке заменить на заглавные. Найти первое цифровое слово и найти сумму его цифр. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 15 декабря, 2007 Жалоба Поделиться Опубликовано 15 декабря, 2007 Trueman: Пункт задания "Найти первое цифровое слово и сумму его цифр в строке, состоящей из латинских букв" я проигнорировал. Бессмысленно искать в Сахаре снег. var a,s:string; i,j,k,q:integer; f:boolean;begink:=0;s:=''; WriteLn('Text=');ReadLn(a);WriteLn(a);WriteLn; a:=a+' ';for i:=1 to length(a) doif a[i]<>' ' then k:=k+1 else begin if a[i-1]=',' then q:=i-2 else q:=i-1; if q-(i-k)<7 then begin f:=true; for j:=i-k to q do if not (a[j]in['A'..'Z','a'..'z']) then f:=false; if f then begin for j:=i-k to q do s:=s+upcase(a[j]); for j:=q+1 to i do s:=s+a[j]; end; k:=0; end end;WriteLn(s); ReadLnend. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 16 декабря, 2007 Жалоба Поделиться Опубликовано 16 декабря, 2007 Спасибо Троль очень признателен завтра пойду получать экзамен :) До встречи в новом году :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
bob89 Опубликовано 19 декабря, 2007 Жалоба Поделиться Опубликовано 19 декабря, 2007 Люди, прошу кто может помогите с написанием программ на С++. 13. Даны целое n>2 и вещественные числа a1, b1, . . . , an, bn (ai < bi ). Рассматривая пары ai и bi, как левые и правые концы отрезков на одной и той же прямой, определить концы отрезка, являющегося перечислением всех этих отрезков. Если такого отрезка нет, то сообщить об этом. 14.Составить программу нахождения наименьшего натурального N–значного числа Х (Х>=10), равного утроенному произведению своих цифр. 15.Составить программу, которая описывает массив записей жильцов дома, отображая в нем следующую информацию о каждом: номер квартиры, фамилия, имя, возраст, для лиц старше 18 в зависимости от рода занятий (учеба, работа, пенсия) – запись с места учебы, места работы и трудового стажа, для пенсионеров – год выхода на пенсию. Программа должна обеспечить ввод данных, поиск квартиры с максимальным числом жильцов, поиск самого юного и самого пожилого жильца, поиск студентов, пенсионеров. 16.Даны квадратные матрицы А и В порядка n. Получить матрицу А(В-Е)+С, где Е – единичная матрица порядка n, а элементы матрицы С вычисляются по формуле Сij=1/(i+j), i,j=1,2,…,n. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Derty Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 Очень нужны программ: 1.Переставить слова в тексте так, чтобы они были упорядочены по длине. 2.Вводится непустая строка из строчных русских букв, заканчивающаяся точкой. Отдельные слова в ней разделены запятыми. Вывести на печать в алфавитном порядке все согласные, которые не входят ни в одно слово. В паскале вообще никак не понимаю, поэтому если можно то всю прогу от "А" до "Я" Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 Derty: 1.Переставить слова в тексте так, чтобы они были упорядочены по длине. var t,s:string; i,k,b,l:integer; begin t:=t+' '; s:=''; ReadLn(t); repeat k:=0; l:=0; b:=0; for i:=1 to Length(t) do if t>='0' then k:=k+1 else if k<>0 then begin if l<k then begin l:=k; b:=i-k end; k:=0 end; s:=s+copy(t,b,l)+' ';delete(t,b,l); until l=0; WriteLn(s); ReadLn end. 2.Вводится непустая строка из строчных русских букв, заканчивающаяся точкой. Отдельные слова в ней разделены запятыми. Вывести на печать в алфавитном порядке все согласные, которые не входят ни в одно слово. var i:integer; j:char; s:string; q:set of char; begin q:=['б'..'з','к'..'н','п'..'т','ф'..'щ']; ReadLn(s); for i:=1 to length(s) do exclude(q,s); for j:='б' to 'щ' do if j in q then Write(j); WriteLn; Readln end. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Derty Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 Derty: Спасибо огромное! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Gift Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 Оень нужны программы: 1)Вводится непустая строка из строчных русских букв, заканчивающаяся точкой. Отдельные слова в ней разделены запятыми. Вывести на печать в алфавитном порядке : все звонкие согласные,которые входят в каждое нечетное слово и не входят хотя бы в одно четное. 2)Выделить из текста и вывести последовательности слов с одинаковыми длинами. Паскаль - это полный ужос(((поэтому желательно полностью)) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 (изменено) Gift: 1)Вводится непустая строка из строчных русских букв, заканчивающаяся точкой. Отдельные слова в ней разделены запятыми. Вывести на печать в алфавитном порядке : все звонкие согласные,которые входят в каждое нечетное слово и не входят хотя бы в одно четное. var t,g:set of char; c:char; s:string; k:boolean; i:byte; begin k:=true; t:=[]; g:=['б'..'д','ж','з','л'..'н','р']; ReadLn(s); for i:=1 to length(s) do if s>'.' then include(t,s) else begin if k then g:=g*t else g:=g-t; t:=[]; k:=not k end; for c:='б' to 'р' do if c in g then Write(c ); WriteLn; ReadLn end. 2)Выделить из текста и вывести последовательности слов с одинаковыми длинами. var t,s:string; i,j,k,m:integer; begin ReadLn(t); k:=0; t:=t+' '; s:=''; for i:=1 to length(t) do if t>='0' then inc(k) else if k<>0 then begin if k<>m then s:=copy(t,i-k,k) else begin if length(s)<>0 then WriteLn; Write(s+' '+copy(t,i-k,k));s:='' end; m:=k; k:=0 end; WriteLn; WriteLn; ReadLn end. Паскаль - это полный ужос Паскаль - очень простой и ясный язык из нескольких десятков слов. Дело не в Паскале, а в приемах программирования, алгоритмизации, а этому вас не учат. Программа пишется переводом с русского на Паскаль, и этот перевод делать очень легко. Трудно составить, хотя бы в уме, описание решения на русском языке. Я бы сказал так: программа пишется на русском, а записывается на Паскале. P.S. Как всегда, автозамена кое-каких сочетаний символов в сообщении на служебные знаки подводит, пришлось немного изменить запись. Изменено 23 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Gift Опубликовано 24 декабря, 2007 Жалоба Поделиться Опубликовано 24 декабря, 2007 Спс огромное!! з.ы. Паскаль сложный ппц по крайней мере для меня)а то бэйсик учил , а перевестись с него на паскаль , или что ещё хуже фортран 77, для мнея трудно очень. З.З.Ы. Ещё раз Спс!) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
general Опубликовано 24 декабря, 2007 Жалоба Поделиться Опубликовано 24 декабря, 2007 Здрасьте. Помогите пожалуйста. Вот задали мне следущее: 1. для заданной матрицы B размера 5*5 найти такие k, для которых k строка матрицы совпадает с k столбцом 2. Дана матрица 3*4. Составить програму для просчёта колличества чётных элементов в каждой строке матрицы n 3.Соитавить подпрограмму для определения расстояния между точками А и В в n-мерном пространстве по формуле α=√(∑(ai-bi)^2 ) i=1 где ai, bi, -координаты точек A и B. Используя её найти минимальное из расстояений между точками X, Y, Z Здрасьте. Помогите пожалуйста. Вот задали мне следущее: 1. для заданной матрицы B размера 5*5 найти такие k, для которых k строка матрицы совпадает с k столбцом 2. Дана матрица 3*4. Составить програму для просчёта колличества чётных элементов в каждой строке матрицы 3.Соитавить подпрограмму для определения расстояния между точками А и В в n-мерном пространстве по формуле ____n α=√(∑(ai-bi)^2 ) ____i=1 где ai, bi, -координаты точек A и B. Используя её найти минимальное из расстояений между точками X, Y, Z ps ссорри за дубль не нашёл где редактировать Здрасьте. Помогите пожалуйста. Вот задали мне следущее: 1. для заданной матрицы B размера 5*5 найти такие k, для которых k строка матрицы совпадает с k столбцом 2. Дана матрица 3*4. Составить програму для просчёта колличества чётных элементов в каждой строке матрицы n 3.Соитавить подпрограмму для определения расстояния между точками А и В в n-мерном пространстве по формуле α=√(∑(ai-bi)^2 ) i=1 где ai, bi, -координаты точек A и B. Используя её найти минимальное из расстояений между точками X, Y, Z Здрасьте. Помогите пожалуйста. Вот задали мне следущее: 1. для заданной матрицы B размера 5*5 найти такие k, для которых k строка матрицы совпадает с k столбцом 2. Дана матрица 3*4. Составить програму для просчёта колличества чётных элементов в каждой строке матрицы 3.Соитавить подпрограмму для определения расстояния между точками А и В в n-мерном пространстве по формуле ____n α=√(∑(ai-bi)^2 ) ____i=1 где ai, bi, -координаты точек A и B. Используя её найти минимальное из расстояений между точками X, Y, Z Здрасьте. Помогите пожалуйста. Вот задали мне следущее: 1. для заданной матрицы B размера 5*5 найти такие k, для которых k строка матрицы совпадает с k столбцом 2. Дана матрица 3*4. Составить програму для просчёта колличества чётных элементов в каждой строке матрицы 3.Соитавить подпрограмму для определения расстояния между точками А и В в n-мерном пространстве по формуле ____n α=√(∑(ai-bi)^2 ) ____i=1 где ai, bi, -координаты точек A и B. Используя её найти минимальное из расстояений между точками X, Y, Z ps ссорри за дубль не нашёл где редактировать нет оооочень сильно глючит Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
666TEHb666 Опубликовано 28 декабря, 2007 Жалоба Поделиться Опубликовано 28 декабря, 2007 Тролль,могу тебя попросить помочь?Я бы и сам сделал,но не доходит((Помощь нужна... Очень прошу,у меня днюха сегодня))будет приятный подарок,плиз) Вообщем ситуация такая: У меня для зачета нужны 9 заданий по Delphi. 7 я написал.Там относительно легкие аля вычисление производной,интеграла и т.д.А вот последние 2 задания не идут(( 8 задание На плоскости даны точка r0 и два вектора A и B. а) Построить изображение точечного множества, определяемого равенством r = r0+'alpha' x A+'betta' * B, где 0<='alpha'<='betta'<=1. б) Для произвольного вектора r написать алгоритм проверки принадлежности к указанному множеству. в) Вычислить коэффициенты уравнения биссектрисы угла с вершиной в r0 и сторонами, параллельными A и B. 'alpha' и 'betta' соответственно греческие буквы) x - умножить))на всякий случай сказал 9 задание Написать программу обращения матрицы, порядок которой заранее не задан, использующую динамическую память. ЗЫ:Тока обязательно на Delphi,очень прошу Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
666TEHb666 Опубликовано 28 декабря, 2007 Жалоба Поделиться Опубликовано 28 декабря, 2007 Ну и если можнопомогите доделать прогу на Паскале,это не нужно для зачета,я для себя пишу))Но если нетрудно и не жалко помогите. Вообщем я написал программу для расчета траектории полета сеаряда.Вводится начальная скорость,угол наклона и количество точек траектории,которые программа будет искать(N)...Дык вот если N=1 то возникает аварийная ситуация деления на ноль,так как dt(временной шаг)=T/(N-1); Я это устранил путем введения условия if N=1 then exit; Хотелось бы,чтобы при этом выводилась надпись вроде 'Please enter more points.Press <enter> for exit'.Но никак не получается,он либо ее не выводит,либо выводит но не распознает else и т.д.Помогите встроить эту малую часть кода в мою прогу.Вот собсно код: {$N+} program gun; uses Crt; var v0,alpha,t, dt,x,y,x0,y0, vx0,vy0,tc:Extended; N,i :Integer; const g=9.81; begin ClrScr; WriteLn('Please enter begin speed'); ReadLn(v0); WriteLn; WriteLn('Please enter pitch of trajectory'); ReadLn(alpha); WriteLn; WriteLn('Please enter number of points'); ReadLn(N); if N<=1 then exit; vx0:=v0*Cos(alpha); vy0:=v0*Sin(alpha); x0:=0; y0:=0; T:=2*vy0/g; dt:=T/(N-1); i:=1; tc:=0; while i<=N do begin x:=x0+vx0*tc; y:=y0+vy0*tc-g*Sqr(tc)/2; WriteLn(x,y); Inc(i); tc:=tc+dt; if i mod 20=0 then begin WriteLn('Press <enter> please'); ReadLn; end; end; WriteLn('Press <enter> please'); ReadLn; end. Заранее благодарю Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 декабря, 2007 Жалоба Поделиться Опубликовано 28 декабря, 2007 666TEHb666: Интересно, зачем тебе понадобилась точность Extended :) Это попадание в глаз мухи, сидящей на Луне... И выводить результаты лучше в нормальной форме, вроде WriteLn(x:9:1,y:9:1); Кроме того, ввод угла стрельбы (по артиллерийски, возвышения) в радианах выглядит несколько непривычно для артиллеристов :) , лучше задавать его в градусах и переводить затем в радианы в программе. А с выходом с сообщением нет никаких проблем: if N<=1 then begin WriteLn; WriteLn('Please enter more points...'); WriteLn('Press <enter> for exit'); ReadLn; exit; end; Можно, конечно, сделать без exit с if ... begin ... end else begin ... end; но зачем вводить лишний уровень begin ... end, ведь использование exit, как ты и сделал, гораздо удобнее :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
666TEHb666 Опубликовано 28 декабря, 2007 Жалоба Поделиться Опубликовано 28 декабря, 2007 666TEHb666: Интересно, зачем тебе понадобилась точность Extended :) Это попадание в глаз мухи, сидящей на Луне... И выводить результаты лучше в нормальной форме, вроде WriteLn(x:9:1,y:9:1); ... Можно, конечно, сделать без exit с if ... begin ... end else begin ... end; но зачем вводить лишний уровень begin ... end, ведь использование exit, как ты и сделал, гораздо удобнее :) Гыг)))а я уже тута сам все сообразил))Я где то сделал глупую ошибку и усе))Но все равно спс за консультацию))Ток я придумал с мессагом поинтереснее,я тама while цикл использовал воть))Приведу измененный код: {$N+} program gun; uses Crt; var v0,alpha,t, dt,x,y,x0,y0, vx0,vy0,tc:Extended; N,i :Integer; const g=9.81; begin ClrScr; WriteLn('Please enter begin speed'); ReadLn(v0); WriteLn; WriteLn('Please enter pitch of trajectory'); ReadLn(alpha); WriteLn; WriteLn('Please enter number of points'); ReadLn(N); while N<=1 do begin WriteLn('Please enter more points'); WriteLn('Please enter number of points'); ReadLn(N); end; vx0:=v0*Cos(alpha); vy0:=v0*Sin(alpha); x0:=0; y0:=0; T:=2*vy0/g; dt:=T/(N-1); i:=1; tc:=0; while i<=N do begin x:=x0+vx0*tc; y:=y0+vy0*tc-g*Sqr(tc)/2; WriteLn(x,y); Inc(i); tc:=tc+dt; if i mod 20=0 then begin WriteLn('Press <enter> please'); ReadLn; end; end; WriteLn('Press <enter> please'); ReadLn; end. А разве я угол ввожу не в градусах???Процессор ведь считает произведение на косинус(синус) угла В ГРАДУСАХ,а не в радианах...С физическими расчетами у меня не всегда гуд,малость не доходит(( И касаемо результатов,а может просто их округлять...? А с делфи не поможешь?Очень надо просто,а то не получить мне зачета((придется с Паскалем заканчивать и в спешке осваивать делфи без хорошей базы алгоритмических построений((а времени нет(( Я тут есчо одну программу пишу))вводятся координаты 3 точек,енто вершины треугольника.Вводится еще одна точка с координатами.Определяться будет находиться эта точка внутри,снаружи или на границе треугольника))Но пока ток пишу алгоритм.нуно как я понимаю,чтобы данная точка лежала по одну сторону с каждой третьей вершиной треугольника относительно прямой(уравнение будет находиться) между двумя другими точками. ЗЫ:И кстати очень плохо,что здесь нельзя редактировать сообщения((Забудешь чтонибудь сказать нуно новое сообщение катать,а его есчо и за флуд могут посчитать(( Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 декабря, 2007 Жалоба Поделиться Опубликовано 28 декабря, 2007 666TEHb666: Процессор ведь считает произведение на косинус(синус) угла В ГРАДУСАХ,а не в радианах...Никогда. В градусах считают только в школьной тригонометрии и в артиллерии :) Вся математика всегда идет в радианах (этому есть обоснование, не буду приводить). Можешь проверить: при угле, скажем, 2, пушка начнет обстреливать свои тылы :) как я понимаю,чтобы данная точка лежала по одну сторону с каждой третьей вершиной треугольника относительно прямой(уравнение будет находиться) между двумя другими точками.Я бы стрелял по площадям :) Если новую точку соединить со старыми, получим три новых треугольника. Если сумма их площадей больше площади старого треугольника, точка - вне, если равна - внутри или на стороне, при этом если она на стороне, то площадь одного треугольника равна нулю, если в вершине, то даже двух. Для расчета площади треугольника по длинам его сторон есть очень простая формула Герона, ее можно оформить в виде функции (как и нахождение длины стороны). кстати очень плохо,что здесь нельзя редактировать сообщения((Забудешь чтонибудь сказать нуно новое сообщение катать,а его есчо и за флуд могут посчитать((были прецеденты, из-за которых для новичков отменили возможность редактирования. Но следующий пост, если с ним долго не тянуть, автоматически объединится с первым.P.S. С проверкой на равенство надо быть осторожным. Из-за погрешности расчетов точного равенства может не быть. В таких случаях проверяют, что абсолютная ведичина разности лежит в пределах возможной погрешности (скажем, одна миллионная от суммы площадей). Это - подводные камни вычислительной математики, в которой приходится учитывать возможные погрешности вычислений. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
666TEHb666 Опубликовано 30 декабря, 2007 Жалоба Поделиться Опубликовано 30 декабря, 2007 Никогда. В градусах считают только в школьной тригонометрии и в артиллерии :) Вся математика всегда идет в радианах (этому есть обоснование, не буду приводить). Можешь проверить: при угле, скажем, 2, пушка начнет обстреливать свои тылы :) Учту обязательно,но пока поработаю с градусами,со временем перейду на более точные вычисления) Я бы стрелял по площадям ;) Ну ... прикольно xD Просто мне пока советовали вот с прямыми работать.Во-первых проще реализовать,во-вторых точность расчетов выше были прецеденты, из-за которых для новичков отменили возможность редактирования. Но следующий пост, если с ним долго не тянуть, автоматически объединится с первым. Уже заметил)))Но вот какие нибудь опечатки это не исправит,приходиться забивать(( Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.