Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 45 из 50<  1 ... 42  43  44  45  46  47  48 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


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

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
Код:
temp: byte

A[i, j]:=random(50)-25;

if a[i,j]> -3 and a[i,j]<3

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, а в отрицательном выдавать сообщение о том, что это не число, а набор символов.
Т.е. проще изучить процедуры работы со строками.


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco писал(а):
Т.е. хотя бы один пробел в файле должен быть (или в каждой строке файла)? И поиск выполняется до первого пробела?
Тогда IMHO проще читать сразу строку, затем в строке искать пробел, отрезать пробел и все, что за ним, а потом конвертировать полученный результат в цифру, проверять правильность конвертации и в положительном случае проверять отсутствие остатка при делении на 3, а в отрицательном выдавать сообщение о том, что это не число, а набор символов.
Т.е. проще изучить процедуры работы со строками.


До первого пробела. Мaccив использовать нельзя.

_________________
The Bird of Hermes is my name, eating my wings to make me tame...


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
Мaccив использовать нельзя.
Дык я и не предлагаю массивы :). Всего лишь строковые переменные. Их можно считать массивом, конечно же :). Так надо определиться, чем считать строки - массивами или нет :).


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
ок, зачем теперь 2 цикла?:)

почитай на тему state machine, оно же конечный автомат. тебе нужен простейший вариант такой штуковины. в целом, первый вариант был неплох для этого, добавь только туда определение пробела и временный буфер для накопления буковок. на бумажке рисовать алгоритмы учили?


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
ToSHiC писал(а):
зачем теперь 2 цикла?
Чтобы точно зациклилось :).


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco писал(а):
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...


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
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 нулю, а уже потом делать перестановку.


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco
2. Хм... про такие нюансы не знал. В книгах которые у меня есть, нет такой информации :D
Видимо, это "не правильные" книги :-)
3. Ясно.
4. Так?
Код:
...
begin
if ns=0 then writeln ('переменная ns=0')
 else
 temp:=a;[1,j]
...

Чего-то не хватает. Нужно дописать выход из процедуры, или заново генерировать матрицу?

Добавлено спустя 51 минуту 9 секунд:
Хм... Матрица генерируется какая-то странная:

Код:
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;


#77

_________________
The Bird of Hermes is my name, eating my wings to make me tame...


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
Видимо, это "не правильные" книги
Просто не во всех книгах детально описываются те или иные функции. Во многих случаях можно воспользоваться встроенной помощью в среде разработки.

yuri86 писал(а):
4. Так?
Нет. Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае ns=0 выдается фраза о отсутствии элементов в заданном диапазоне, а в противном - выполняется перестановка.

yuri86 писал(а):
Хм... Матрица генерируется какая-то странная
А зачем было переписывать процедуру вывода матрицы - она же вполне работоспособная была? Если нужен был форматированный вывод - можно было бы вместо строки write(A[i,j]) написать write(A[i,j]:x:y), где x и y - нужные цифры.


 

Member
Статус: Не в сети
Регистрация: 14.09.2008
Ребят напишите пожалуйста решение задач на языке 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 лет сообщите что он имеет право голосовать в противном случае вычислите через сколько лет ему будет предоставлено это право.

_________________
Gigabyte GA-MA770-UD3/955BE @3,93Ghz/Thermalright Silver Arrow/RAM 4GB @952Mhz(6-6-6-18-2T)/GTX 580 3GB @850mhz/SSD Plextor M3 128Gb/TT Toughpower750W


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
решил сэкономить?


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
времени не было писать
maco писал(а):
yuri86 писал(а):
4. Так?
Нет. Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае 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...


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
if ns=0 then writeln ('Переменная ns=0')
Угу, только бы сообщение более информативное для конечного пользователя, который не знает все переменные в вашей программе поименно :). Т.е. в стиле "заданных элементов не найдено, перестановка строк в матрице не производилась".

yuri86 писал(а):
Не выводит "новую" (в которой поменялись строки местами) матрицу на экран
А в основной программе кто-то догадался вставить вызов соответствующей процедуры после перестановки :)?


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco писал(а):
Угу, только бы сообщение более информативное для конечного пользователя, который не знает все переменные в вашей программе поименно :). Т.е. в стиле "заданных элементов не найдено, перестановка строк в матрице не производилась".


Ну, это понятно. Пока вариант для себя... :-)

maco писал(а):
А в основной программе кто-то догадался вставить вызов соответствующей процедуры после перестановки :)?


Вставил вызов. Под Win7 x64 Pascal без бубна не работает.... :gun: Установил DosBox, нормально пошло... :D

Только результат ее работы какой-то странный:

#77

Сокращение должно выводится только когда заданных элементов не найдено, а оно выводится всегда. И строки должны меняться местами (диапазон от -3 до 3), но числа в замененной строке другие :abuse:
Или меня глючит с недосыпа?

_________________
The Bird of Hermes is my name, eating my wings to make me tame...


Последний раз редактировалось yuri86 10.06.2010 13:36, всего редактировалось 2 раз(а).

 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
Только результат ее работы какой-то странный
Дык прикрепили бы полный вариант программы. Т.е. телепатически угадывать, где вы забыли запятую/скобку/знак и т.д., нет никакого желания.


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco

Код:
procedure SearchString;

begin

  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 раз(а).

 

Member
Статус: Не в сети
Регистрация: 04.10.2004
maco писал(а):
Проверку надо делать до цикла. Т.е. сначала проверка, потом в случае ns=0 выдается фраза о отсутствии элементов в заданном диапазоне, а в противном - выполняется перестановка.
А в последнем варианте сначала переменной ns присвается значение 0, потом сразу же проверяется, равно ли значение этой переменной 0 (и оно таки равно 0 :D). Затем уход на ветку с надписью "ns=0", а затем еще и цикл перестановки с ns=0, т.е. такой цикл, который делать нельзя.
Не удивительно, что в результате получается полная чушь.
Надо было мне раньше требовать полную программу :). В таком случае не было бы неясностей относительно расположения оператора проверки ns.


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
maco
:-) Поправил. Теперь программа выдает верные результаты. :dance:
Спасибо, за помощь, теперь займусь оформлением и т.п :D

_________________
The Bird of Hermes is my name, eating my wings to make me tame...


 

Member
Статус: Не в сети
Регистрация: 30.03.2010
У меня опять вопрос :-). Д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...


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
yuri86 писал(а):
read(F);
Не указано, в какую переменную производится чтение.
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. Хотя тут нужно еще добавить проверку на то, что строка цифр должна заканчиваться символом пробела, т.к. в примере строка цифр может заканчиваться любым символом, отличным от цифр (а также предусмотрен вариант наличия только символов цифр - т.е. выход по окончанию строки).


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 45 из 50<  1 ... 42  43  44  45  46  47  48 ... 50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan