Бумер Опубликовано 6 декабря, 2007 Жалоба Поделиться Опубликовано 6 декабря, 2007 Не понял вопрос... брр-рр-рр! Что значит загадочная фраза "Текст является десятичной записью числа, кратного кол-ву символов"? Есть текст из букв и цифр. Мы считаем количество символов, потом мы должны найти десятичное число, которое кратно кол-ву символов. А как может быть ТЕКСТ десятичной записью числа? Насколько я знаю числа записываются цифрами (ну еще бывает буквами - прописью, но про это здесь ни слова нет) Расшифруйте мне пожалуйста эту загадочную фразу, а то я ее себе в подпись поставлю! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 декабря, 2007 Жалоба Поделиться Опубликовано 6 декабря, 2007 Бумер: Текст - это последовательность символов, в которую могут входить буквы, цифры, знаки препинания и т.д. В общем, то, из чего состоят в языках программирования типы символ и строка. То есть текст "123" - это все же текст, одно из толкований которого - это запись числа 123. В этом примере число (123) не кратно количеству символов (3), а вот 122 было бы кратно количеству символов в его записи, т.е. 3. neprogramist: {$N+}var s:String[12]; k:Double; n:Integer;begin ReadLn(s);Val(s,k,n);WriteLn((Abs(Frac(k/Length(s)))<0.01)and(n=0));ReadLnend. Pshuk: "Новички" могут вставлять картинки в свои сообщения только через внешний файлообменник, подробнее об этом написано в FAQ к форуму, ссылка на FAQ находится вверху любой страницы форума. Писать целую программу "электропианино" - это многовато :) . Как я понимаю, в основном там надо барабанить по клавишам и писать всякое оформление программы. Звуки генерируются просто, например, эта программка будет играть гамму. uses CRT;var i,j,t:Integer;const f:array[1..7] of integer=(262,294,330,349,392,440,494);begint:=1000;for i:=1 to 7 do begin Sound(f[i]);for j:=1 to 100 do Delay(t);Nosound endend. Тут, правда, есть одно "но": насколько я помню, при запуске из Windows таймер Turbo Pascal работает неправильно (в несколько десятков раз быстрее), эта версия будет работать под Windows, а при запуске из DOS, скорее всего, придется убрать фрагмент for j:=1 to 100 do , который обеспечивает стократное увеличение задержки, указанной в Delay. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Pshuk Опубликовано 6 декабря, 2007 Жалоба Поделиться Опубликовано 6 декабря, 2007 ФАК мне помог! Вот и сама формула генерации звуков http://img524.imageshack.us/my.php?image=clipimage002mu1.gif Hz - змінна типу Word, частота ноти в Гц; Okt - змінна типу Integer, приймає значення від -3 до 4; Nota - змінна типу Byte, приймає значення від 1 до 12. СКЛ програму по этой формуле... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 декабря, 2007 Жалоба Поделиться Опубликовано 6 декабря, 2007 (изменено) Pshuk: Программа пишется не по формуле. По формуле пишется только выражение в программе. А вокруг сто одежек, и все без застежек. Сама формула в записи Паскаля будет выглядеть так: Hz:=Round(440*Exp(Ln(2)*(Oct-(10-Nota)/12))); Пример реализация звучания по этой формуле в программе - так, например: uses CRT;const Note:array[1..12] of String[4]=('Do','Do#','Re','Re#','Mi','Fa','Fa#','Sol','Sol#','La','La#','Si');var Nota:Byte; Oct:Integer; j,t,Hz:Word;beginrepeat Read(Nota); if Nota=0 then break; Read(Oct);Hz:=Round(440*Exp(Ln(2)*(Oct-(10-Nota)/12)));WriteLn('Octava: ',Oct,' Note: ',Note[Nota],' Frequenz: ',Hz); t:=1000;Sound(Hz); for j:=1 to 100 do Delay(t); Nosound; until Falseend. Номера ноты и октавы тут вводятся друг за другом, разделяемые пробелом или Enter. Выход из программы по номеру ноты, равному нулю. До нормального интерфейса электропианино, однако, тут еще семь верст по клавиатуре. P.S. Убрал из программы две буквы. Теперь можно вводить последовательность нот, которую проиграет программа. Например, если ввести 1 1 2 2 3 3 4 4 0 и нажать Enter, программа проиграет четыре заданные ноты и закончит работу (т.к. последнее число - 0). Изменено 6 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 Спасибо большое! выручили... Помогите плиииз... ума не приложу как это делать Дана непустая последовательность слов из строчных русских букв; между соседними словами – запятая, за последним словом – точка. Напечатать в алфавитном порядке множества, сформированные согласно варианту: Справка: гласные буквы: а, е, ё, и, о, у, ы, э, ю, я; согласные: все остальные буквы, кроме й, ь, ъ; звонкие согласные: б, в, г, д, ж, з, л, м, н, р; глухие согласные: п, к, с, т, ф, х, ц, ч, ш, щ. Вариант 2: 1)Все русские гласные буквы (а, е, и, о, у, ы, э, ю, я), входящие в этот текст; 2)все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово. На Borlans pascal... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 neprogramist: Очень похожая задача в этой теме уже была. Только набор букв был, помнится, не из звонких, а из глухих. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 Там похожая но не такая... Мне нужно именно ту которая выполнит мои условия.. Я даже не знаю как ее переправить(( напиши пожалуйста для моего условия... Дана непустая последовательность слов из строчных русских букв; между соседними словами – запятая, за последним словом – точка. Напечатать в алфавитном порядке множества, сформированные согласно варианту. Справка: гласные буквы: а, е, ё, и, о, у, ы, э, ю, я; согласные: все остальные буквы, кроме й, ь, ъ; звонкие согласные: б, в, г, д, ж, з, л, м, н, р; глухие согласные: п, к, с, т, ф, х, ц, ч, ш, щ. 2. Все русские гласные буквы (а, е, и, о, у, ы, э, ю, я), входящие в этот текст; все звонкие согласные буквы, которые входят в каждое нечетное слово и не входят ни в одно четное слово. Для вывода множества использовать процедуру PRINT(M: N), Задача... Текст является десятичной записью числа, кратного количеству символов; а эту зачачу написать с какими нибудь функциями типа CHR, ORD, PRED, SUCC. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 Помогите решить задачу. Язык С. Компилятор Visual Studio.NET 2005 Необходимо вывести числа, вводимые в одномерный массив (количество элементов 10) наоборот. Например, с клавиатуры вводится 12, 23, 34 - на экран выводится 34, 23, 12. Заранее спасибо! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 (изменено) neprogramist: type N=set of char;var M1,M2,M3,M4,M5,M6:set of char; s:string; k:boolean; i:byte;procedure Print(M:N); var j:char;begin for j:='а' to 'я' do if j in M then Write(j); WriteLn end;beginM1:=['a','е','и','о','у','ы','э'..'я'];M2:=['б'..'д','ж','з','л'..'н','р']; ReadLn(s); M3:=[]; for i:=1 to Length(s) do if s[i] in M1 then Include(M3,s[i]); Print(M3); k:=true; M4:=M2; M6:=M2; for i:=1 to length(s) do if s[i]<='.' then begin if k then begin M6:=M5*M6; M5:=[] end;k:=not k end else if s[i] in M2 then if k then Include(M5,s[i]) else Exclude(M4,s[i]); Print(M6*M4); ReadLnend. {$N+}var s:String[12]; k,p:Double; i,n:Integer;beginReadLn(s);n:=0;k:=0;p:=1;for i:=Length(s) downto 1 doif(s[i]>='0')and(S[i]<='9')then begin k:=k+(Ord(s[i])-48)*p;p:=p*10 endelse begin n:=1;break end;WriteLn((Abs(Frac(k/Length(s)))<0.01)and(n=0));ReadLnend. Charlie Rat: main(){int i,m[10];for(i=0;i<=9;i++)scanf("%d",&m[i]); for(i=9;i>=0;i--)printf("%d\n",m[i]);getch();} Изменено 7 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Charlie Rat Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 Спасибо! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 8 декабря, 2007 Жалоба Поделиться Опубликовано 8 декабря, 2007 ну ты крут!)) спасибо! а вы сможете блок схемы к этим задачам написать... самые приметивные... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 8 декабря, 2007 Жалоба Поделиться Опубликовано 8 декабря, 2007 и вы можете объясните написание проги для предыдущих двух задач... :bye1: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 декабря, 2007 Жалоба Поделиться Опубликовано 8 декабря, 2007 (изменено) neprogramist: Насчет блок-схем я уже писал, не буду. Это значит перерисовывать текст программы в квадратики и ромбики, посмотри, какой материал вам давали по этому поводу, бери карандаш и линейку... Рисованием я не увлекаюсь /\ / \ / \ / \/ s[i]<='.' \\ / \ / \ / \/ Бр-р... Никто не думает квадратиками и ромбиками, хотя использование крупноблочных блок-схем полезно для иллюстраций. Тут такая схема выглядела бы как Ввод - Решение - Вывод ;) Блок-схемы пришли из древних языков программирования, когда по виду оператора программы было непонятно, что он делает. Тогда к программам составляли очень подробные описания в виде блок-схем. Потом, чтобы программы стали понятны человеку, изобрели языки программирования высокого уровня вроде Pascal, гораздо более понятные и компактные. Но так как подробные блок-схемы на всякий случай иногда требовались заказчиками, были созданы программы для рисования блок-схем по коду программы. Для автоматического построения блок-схем Pascal-программ тут есть русскоязычная, компактная и простая в использовании программа Avtoshema. Правда, блок-схемы получаются, будто программа рисовала их, слегка (а может, и порядочно) подвыпив :doh: , но очень красивые. Для сдачи блок-схем придется, скорее всего, их несколько подкорректировать, они не вполне соответствуют стандартам, но по крайней мере, корректировать куда легче, чем делать с нуля. и вы можете объясните написание проги для предыдущих двух задач... Хм... Для себя я формулировал алгоритм примерно так...Первая задача: Просматриваем текст, создавая множество всех просмотренных символов, входящих в множество гласных. Печатаем полученное множество. Снова просматриваем текст, фиксируя в переменной k признак нечетности слова. Для каждого нечетного слова создаем множество входящих в него символов и множим его на множество символов, вошедших во все предыдущие нечетные слова, первоначально - полное множество звонких согласных; для четных слов исключаем каждый входящий в них символ из множества звонких согласных. После просмотра всех слов печатаем произведение этих множеств. В принципе программу можно было бы сократить, решая обе части задачи в ходе одного просмотра, но для упрощения логики я не стал их объединять. Вторая задача: Разрешаем компилятору использовать действительные числа двойной точности, так как у нас в числе может быть до двенадцати цифр. Просматриваем текст от конца к началу, проверяя символы на принадлежность к цифрам. При положительном результате проверки превращаем, с использованием функции Ord, каждый текущий символ в машинное представление соответствующего ему числа, умножаем его на увеличивающуюся с каждым символом на порядок степень десяти и добавляем к уже накопленному результату, первоначально нулю. В противном случае устанавливаем признак ошибки и выходим из цикла. Затем находим дробную часть частного от деления получившегося числа на длину строки, проверяем, что она не превосходит возможной погрешности представления результата деления при кратных числах и признак ошибки не установлен, и печатаем результат этой проверки. В принципе с учетом того, что по сути мы работаем с целыми числами, погрешность результата деления, скорее всего, будет равна нулю и проверку кратности можно было бы чуть упростить, но с действительными числами всегда надежнее предполагать, что их значения представлены в компьютере приближенно. Изменено 8 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 8 декабря, 2007 Жалоба Поделиться Опубликовано 8 декабря, 2007 спасибо за объяснение... к стати очень клевая прога по постройке блок-схем... ВСЕМ СОВЕТУЮ!!! а как будет выглядеть ''таблица внешних спецификаций'' по этим двум задачам? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 декабря, 2007 Жалоба Поделиться Опубликовано 8 декабря, 2007 neprogramist: а как будет выглядеть ''таблица внешних спецификаций'' по этим двум задачам?Как препод захочет. Внешние спецификации - это просто четко записанные условия задачи, тут скорее всего имеется в виду формализованное описание, с какими-нибудь псевдоматематическими обозначениями. Табличное - значит, надо оформить в виде таблицы. В какой точно форме, можно узнать только у тебя из конспекта. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 9 декабря, 2007 Жалоба Поделиться Опубликовано 9 декабря, 2007 вот пример таблицы: № Имя Назначение Е. Изм. Тип О.Д.З. 1 B Сформированный вектор - Вещ. R 2 Х Исходный вектор из n элементов - Вещ. R 3 M (minx + maxx)/2 - Вещ. R 4 N Количество элементов - Вещ. 1……12 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 декабря, 2007 Жалоба Поделиться Опубликовано 9 декабря, 2007 Как обычно, пример на уровне 2х2=4, поэтому трудно сказать, какие претензии будут к более сложным заданиям. Можно написать что-то типа 1 s Исходная строка string 2 M3 Результат: Множество set of char ['a','е','и','о','у','ы','э'..'я'] 3 - Результат: Множество set of char ['б'..'д','ж','з','л'..'н','р'] 1 s Исходная строка string[N] 2 N Количество элементов Цел. 0<=N<=12 3 - Результат: Булевская переменная (Цел.(s) mod N =0) boolean Вообще-то в спецификации полагалось бы вписать и условие задачи (или, в стиле Microsoft, текст программы - то, что делает программа, принимается за правильное поведение как аксиома :g: ). Но, делая что-то бессмысленное, надо стараться ограничиваться минимумом. Хотя какой минимум устроит вашего преподавателя, сказать не берусь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 10 декабря, 2007 Жалоба Поделиться Опубликовано 10 декабря, 2007 Спасибо!!! Эти задачи я сдал с успехом!! Но преаодаватель насел на меня еще больше(типо я шарю в програмировании и могу решить задачи и по труднее). Пожалуйста, как можно подробнее объясните как новичку, принцип ее решения... объясните какие команды что выполняют... :) Задача: Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования. Удалить из исходной строки слова, в которых имеются повторяющиеся литеры(буквы). Найти первое цифровое слово и увеличить его значение в 10 раз. Решить задачу по этому примеру: Program prim_lab; Const Doubl=' '; {2 пробела} VAR S:string; i,k:byte; Massiv:array[1..100] of string; Begin Write('ввод строки текста'); readln(s); {Удалим пробелы слева} While s[1]=’’ do delete(s,1,1); s:=s+' '; {обеспечим пробел в конце текста} repeat i:=pos(doubl,s); {i – позиция двух пробелов в тексте} if i>0 then delete(s,i,1) {удаление первого пробела из пары} until i=0; {Переносим выделенные слова в массив, после чего они удаляются из исходного текста} k:=0; {счетчик слов в формируемом массиве} repeat i:=pos(‘ ‘,s); if i>0 then begin inc(k); massiv[k]:=copy(s,1,i-1); {запись в massiv найденного слова} delete(s,1,i) {удаление первого слова c пробелом} end until s=’’; {повторять, пока строка не пуста} {вывод массива слов} for i:=1 to k do writeln(massiv); end. объясните какие команды что выполняют! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 10 декабря, 2007 Жалоба Поделиться Опубликовано 10 декабря, 2007 задача 2 Модульное программирование тоже объяснить какие команды что выполняют. Даны две целые матрицы А[5,6] и В[7,8]. Если у какой-либо из этих матриц больше половины строк начинается с простого числа, то все отрицательные элементы этой матрицы заменить на 1. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 10 декабря, 2007 Жалоба Поделиться Опубликовано 10 декабря, 2007 Пожалуйста, как можно подробнее объясните как новичку, принцип ее решения... объясните какие команды что выполняют... Пожалуй, лучше, чем учебник, для этого ничего не найдешь... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 11 декабря, 2007 Жалоба Поделиться Опубликовано 11 декабря, 2007 это точно... а программы напишите? :sm(100): Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 11 декабря, 2007 Жалоба Поделиться Опубликовано 11 декабря, 2007 Пожалуйста! очень нужно... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Trueman Опубликовано 11 декабря, 2007 Жалоба Поделиться Опубликовано 11 декабря, 2007 Многоуважаемые знатоки языка Паскаль помогиет пожалуста с маленькой программой просчета массивов. Суть такова :sly: Задан массив из 20 чисел вводиться число С. И все числа в которых нет данного числа С выводяться на экран пример: допустим есть пять чисел 1245; 5467; 6788; 9654; 2341; вводим С например 5 и выводяться только те числа в которых нет С тоесть: 6788 и 2341 Просьба помочь а то сам както не справляюсь :blushing: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 декабря, 2007 Жалоба Поделиться Опубликовано 11 декабря, 2007 (изменено) neprogramist: Первую задачу решить не могу. Условие противоречиво. Проблема в запятой. "Казнить нельзя помиловать" :blushing: По 1-му предложению граница слова - пробел или запятая, по 3-му - только пробел. Вторую задачу я тоже не понимаю: что значит "даны"? Если даны, где они? Если их надо вводить, так и надо написать. Кстати, если их надо выводить, это тоже надо бы написать :sly: Но я представляю себе, в общем, что хотел ваш преподаватель: увидеть, что тот, кто писал программу, умеет использовать собственные функции и процедуры, поэтому написал решение с их использованием, хотя они тут не нужны и заметно усложняют и удлиняют решение. 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 Write(' m=');ReadLn(m);Write(' n=');ReadLn(n); for i:=1 to m dofor 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; ReadLnend. Trueman: const n=20;var a:array[1..n] of integer; i,j,c,k:integer; p:boolean;begin for i:=1 to n do begin Write('a[',i:2,']=');ReadLn(a[i]) end;Write('c='); ReadLn©;for i:=1 to n do begin k:=a[i]; p:=true; repeat if k mod 10 =c then p:=false; k:=k div 10 until k=0; if p then Write(a[i]:8) end; ReadLnend. Можно было немного короче со строками, но до них вы, наверное, не дошли... При проверке советую для простоты ввода заменить n на меньшее число, например, для приведенного примера из пяти чисел на 5. P.S. Я тут исходил из того, что С - однозначное число, как в примере. Если нет, то можно переделать, но тогда уже прямой смысл использовать строки. Изменено 11 декабря, 2007 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
neprogramist Опубликовано 11 декабря, 2007 Жалоба Поделиться Опубликовано 11 декабря, 2007 что то я не пойму. по условию мы вводим две матрицы. а в задаче вводится одна. и он почему то не заменяет у матрицы отрицательные числа на единицу. не могли бы вы как нибудь внедрить туда вторую матрицу для выполнения условия задачи. А в первой задаче текст может быть и с запятыми и с пробелами одновременно. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.