Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
for j:=1 to m do begin temp:=a[1,j]; {смена местами первой строки и строки с мак. числом элементов} a[1,j]:=a[ns,j]; a[ns,j]:=temp; end; end; }
readln();
1. real. 2. random с параметром возвращает word в диапазоне от 0 до параметра, а без параметра - real в диапазоне от 0 до 1. 3. Скобки нужны для того, чтобы адекватно исполнялось, т.е. последовательность операций - сначала нужно исполнить < и >, потом and и результат and'а подсунуть if'у. 4. Если выполняется перестановка в случае, когда ns остался равным 0, то будет забавное зрелище . Можно перед циклом просто делать проверку ns и в случае 0 не выполнять перестановку. Ну и } лишняя. 5. Скобки лишние.
yuri86 писал(а):
Дaн cимвoльный фaйл. oпрeдeлить являeтcя ли пocлeдoвaтeльнocть cимвoлoв (дo прoбeлa) цeлым чиcлoм. Ecли дa, oпрeдeлить дeлитcя ли oнo бе ocтaткa на 3
Т.е. хотя бы один пробел в файле должен быть (или в каждой строке файла)? И поиск выполняется до первого пробела? Тогда IMHO проще читать сразу строку, затем в строке искать пробел, отрезать пробел и все, что за ним, а потом конвертировать полученный результат в цифру, проверять правильность конвертации и в положительном случае проверять отсутствие остатка при делении на 3, а в отрицательном выдавать сообщение о том, что это не число, а набор символов. Т.е. проще изучить процедуры работы со строками.
Т.е. хотя бы один пробел в файле должен быть (или в каждой строке файла)? И поиск выполняется до первого пробела? Тогда IMHO проще читать сразу строку, затем в строке искать пробел, отрезать пробел и все, что за ним, а потом конвертировать полученный результат в цифру, проверять правильность конвертации и в положительном случае проверять отсутствие остатка при делении на 3, а в отрицательном выдавать сообщение о том, что это не число, а набор символов. Т.е. проще изучить процедуры работы со строками.
До первого пробела. Мaccив использовать нельзя.
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
Дык я и не предлагаю массивы . Всего лишь строковые переменные. Их можно считать массивом, конечно же . Так надо определиться, чем считать строки - массивами или нет .
почитай на тему state machine, оно же конечный автомат. тебе нужен простейший вариант такой штуковины. в целом, первый вариант был неплох для этого, добавь только туда определение пробела и временный буфер для накопления буковок. на бумажке рисовать алгоритмы учили?
1. real. 2. random с параметром возвращает word в диапазоне от 0 до параметра, а без параметра - real в диапазоне от 0 до 1. 3. Скобки нужны для того, чтобы адекватно исполнялось, т.е. последовательность операций - сначала нужно исполнить < и >, потом and и результат and'а подсунуть if'у. 4. Если выполняется перестановка в случае, когда ns остался равным 0, то будет забавное зрелище . Можно перед циклом просто делать проверку ns и в случае 0 не выполнять перестановку. Ну и } лишняя. 5. Скобки лишние.
1. Поправил. 2. Не правильно задал random? нужно чтобы генерировались числа отрицательные и положительные. Ну, например, от -25 до 25. 3. Использовать begin и and? 4. Подробнее можно?
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
yuri86 2. random задан в общем-то синтаксически правильно . Но при таком задании будет получен word, а переменная, в которую записывается это значение - real. В результате нужный диапазон не будет получен. Для переменной real нужно использовать просто random без параметров. Если нужен дмапазон, отличающийся от 0 до 1 (тот же -25...+25), то можно умножить результат random'а на 50 и вычесть 25. 3. if ((a[i,j]>-3) and (a[i,j]<3)) - я мог и переборщить со скобками, но такой вариант гарантирует проверку желаемого условия . 4. Если не будет найдено строки, содержащей числа в указанном диапазоне, то ns останется равным нулю. При попытке перестановки 0-вой и 1-ой строки в 1-ую строку будут помещены произвольные числа, т.к. 0-вая строка массива не задана. В таком случае желательно сначала проверить, не равно ли ns нулю, а уже потом делать перестановку.
procedure GenMatrix; begin clrscr; randomize; write(' Введите количество строк: '); readln(m); write('Введите количество столбцов: '); readln(n); for i:=1 to m do for j:=1 to n do A[i, j]:=random*50-25; end;
Или форматированный вывод не правильно задал?
Код:
procedure PrintMatrix;
begin writeln('Исходная матрица: '); for i:=1 to m do begin for j:=1 to n do writeln(A[i,j]:6:0); end; end;
Просто не во всех книгах детально описываются те или иные функции. Во многих случаях можно воспользоваться встроенной помощью в среде разработки.
yuri86 писал(а):
4. Так?
Нет. Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае ns=0 выдается фраза о отсутствии элементов в заданном диапазоне, а в противном - выполняется перестановка.
yuri86 писал(а):
Хм... Матрица генерируется какая-то странная
А зачем было переписывать процедуру вывода матрицы - она же вполне работоспособная была? Если нужен был форматированный вывод - можно было бы вместо строки write(A[i,j]) написать write(A[i,j]:x:y), где x и y - нужные цифры.
Ребят напишите пожалуйста решение задач на языке pascal 1)Вывести последовательность чисел 11,12,13,14,21,22,23,24,,31,32,33,34 2)Вывести на экран таблицу умножения для 5 чисел от 9 до 4. 3)Составить программу которая печатает таблицу сложения 10 натуральных чисел 4)Последовательность задана формулой её n-го члена:An=n^(n-1)+ctg(n).Вычислите первые десять членов последовательности и их сумму. 5)Написать программу которая вычисляет факториал числа введённого с клавиатуры 6)Написать программу которая выведет на экран 7 строк по 5 случайных чисел в диапазоне 0..50.Использовать датчик случайных чисел и вложенные циклы 7)Составить программу определяющую является ли число чётным. 8)Написать прграмму которая оперделяет принадлежит ли введённое с клавиатуры число промежутку(-5;1) 9)Написать программу которая располагает введённые с клавиатуры числа в порядке возрастания . 10Написать программу которая определяет средний бал студента по итогам сессии . 11)Написать программу пересчёта веса из фунтов в килограммы(фунт равен 409.5 г) 12)Написать программу пересчёта величины временного интервала заданного в минутах в величину выраженную в часах и минутах 13)Написать программу запрашивающую возраст пользователя.Если ему не менее 18 лет сообщите что он имеет право голосовать в противном случае вычислите через сколько лет ему будет предоставлено это право.
Нет. Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае ns=0 выдается фраза о отсутствии элементов в заданном диапазоне, а в противном - выполняется перестановка.
Код:
if ns=0 then writeln ('Переменная ns=0') else for i:=1 to m do
maco писал(а):
yuri86 писал(а):
Хм... Матрица генерируется какая-то странная
А зачем было переписывать процедуру вывода матрицы - она же вполне работоспособная была? Если нужен был форматированный вывод - можно было бы вместо строки write(A[i,j]) написать write(A[i,j]:x:y), где x и y - нужные цифры.
Поторопился, напортачил... Исправил.
Не выводит "новую" (в которой поменялись строки местами) матрицу на экран:
Код:
procedure PrintMatrix2;
begin
for ns:=1 to m do begin for j:=1 to n do write(A[ns,j]:6:0); writeln; end; end;
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
Угу, только бы сообщение более информативное для конечного пользователя, который не знает все переменные в вашей программе поименно . Т.е. в стиле "заданных элементов не найдено, перестановка строк в матрице не производилась".
yuri86 писал(а):
Не выводит "новую" (в которой поменялись строки местами) матрицу на экран
А в основной программе кто-то догадался вставить вызов соответствующей процедуры после перестановки ?
Угу, только бы сообщение более информативное для конечного пользователя, который не знает все переменные в вашей программе поименно . Т.е. в стиле "заданных элементов не найдено, перестановка строк в матрице не производилась".
Ну, это понятно. Пока вариант для себя...
maco писал(а):
А в основной программе кто-то догадался вставить вызов соответствующей процедуры после перестановки ?
Вставил вызов. Под Win7 x64 Pascal без бубна не работает.... Установил DosBox, нормально пошло...
Сокращение должно выводится только когда заданных элементов не найдено, а оно выводится всегда. И строки должны меняться местами (диапазон от -3 до 3), но числа в замененной строке другие Или меня глючит с недосыпа?
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
Последний раз редактировалось yuri86 10.06.2010 13:36, всего редактировалось 2 раз(а).
max:=0; colt:=0; ns:=0; if ns=0 then writeln ('Переменная ns=0') else for i:=1 to m do begin for j:=1 to n do begin if ((a[i,j]>-3) and (a[i,j]<3)) then colt:=colt+1; end; if colt>max then begin ns:=i; max:=colt; end; colt:=0; end; for j:=1 to m do
begin temp:=a[1,j]; {смена местами первой строки и строки с мак. числом элементов} A[1,j]:=a[ns,j]; A[ns,j]:=temp; end; end;
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
Последний раз редактировалось yuri86 11.06.2010 11:46, всего редактировалось 2 раз(а).
Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае ns=0 выдается фраза о отсутствии элементов в заданном диапазоне, а в противном - выполняется перестановка.
А в последнем варианте сначала переменной ns присвается значение 0, потом сразу же проверяется, равно ли значение этой переменной 0 (и оно таки равно 0 ). Затем уход на ветку с надписью "ns=0", а затем еще и цикл перестановки с ns=0, т.е. такой цикл, который делать нельзя. Не удивительно, что в результате получается полная чушь. Надо было мне раньше требовать полную программу . В таком случае не было бы неясностей относительно расположения оператора проверки ns.
У меня опять вопрос . Дaн cимвoльный фaйл. oпрeдeлить являeтcя ли пocлeдoвaтeльнocть cимвoлoв (дo прoбeлa) цeлым чиcлoм. Ecли дa, oпрeдeлить дeлитcя ли oнo без ocтaткa на 3
Код:
uses crt;
var F: text; ch: char; s, code: integer;
BEGIN
assign (F, 'file.txt'); reset (F);
read(F);
while not Eoln(F) do if (s mod 3=0) then writeln('число делется на 3') else writeln('число не делется на 3'); close(F); readln;
END.
Не понятно как определить символ или буква в файле...
_________________ The Bird of Hermes is my name, eating my wings to make me tame...
Не указано, в какую переменную производится чтение.
yuri86 писал(а):
while not Eoln(F) do
Хороший бесконечный цикл получается, если внутри нет операций чтения из файла в какую-нибудь переменную .
Код:
var F: text; ch: char; st:string; s, code: integer;
BEGIN assign (F, 'file.txt'); reset (F); st:=''; while not Eoln(F) do begin read(F,ch); if ((ord(ch)<$30) or (ord(ch)>$39)) then break; st:=st+ch; end; writeln(st); close(F); readln; END.
Это пример, который складывает в переменную st только символы цифр, потом можно воспользоваться процедурой Val. Хотя тут нужно еще добавить проверку на то, что строка цифр должна заканчиваться символом пробела, т.к. в примере строка цифр может заканчиваться любым символом, отличным от цифр (а также предусмотрен вариант наличия только символов цифр - т.е. выход по окончанию строки).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения