Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10669
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7160
∙ повысить рейтинг »
Роман Селиверстов
Статус: Советник
Рейтинг: 5099
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1251
Дата выхода:24.09.2013, 11:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:45 / 51
Вопросов / ответов:3 / 5

Консультация # 144258: Здравствуйте дорогие эксперты я в паскале очень плохо разбираюсь помогите пожалуйста позарез надо решить 4-е задачи. Только не смйтесь. 1)Дано натуральное число n. Определить сколько цифр в числе. 2)Даны три действительных числа. Отрицательные – заменить её модулём, положительные – нулём. 3)Дано число n. Определить число делителей данного ...


Консультация # 84180: Вот это самое жестокое что может быть....я полностью не знаю что делать...помогите люди добрые..я знаю вы тут..... Ввести двумерный массив D 3*5.Вычислить максимальный по модулю элемент (Dmax) и с помощью "под программы 2" построить массив D1=D max*D. Упорядочить его строки по возрастанию с помощью "под прогаммы 1". &quo...
Консультация # 180303: Дорогие Эксперты! будьте добры помоч с реализацией ряда процедур.... вот список и заголовки их
Код :
const 
  StrOk=0; MemEr=1; LenEr=2; (это ошибки которые функции возвращают:0-все ок, 1-ошибка памяти, 2-ошибка длинны )
type 
 
...

Консультация # 144258:

Здравствуйте дорогие эксперты я в паскале очень плохо разбираюсь помогите пожалуйста позарез надо решить 4-е задачи. Только не смйтесь.
1)Дано натуральное число n. Определить сколько цифр в числе.
2)Даны три действительных числа. Отрицательные – заменить её модулём, положительные – нулём.
3)Дано число n. Определить число делителей данного числа.
4)Даны три действительных числа. Определить наименьшее и наибольшее из них.
Причём эти задачи надо решить с помощью фунукций.

Дата отправки: 18.09.2008, 00:54
Вопрос задал: Wolvertula
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Boriss (Академик):

Здравствуйте, Wolvertula!
В приложении код программы, решающий все 4 Ваших задачи.
Для минимального и максимального используются открытые массивы - очень удобно. Аналогично можно было поступить и для изменения элементов массива, но решил показать, как еще можно делать.
Ежели что не понятно будет, спрашивайте

Приложение:

Консультировал: Boriss (Академик)
Дата отправки: 18.09.2008, 10:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Долгих Людмила:

Здравствуйте, Wolvertula!
№4. Один из возможных способов
var x,y,z:real;
function max(a,b:real):real;
begin
if a>b then max:=a else max:=b;
end;
function min(a,b:real):real;
begin
if a<b then min:=a else min:=b;
end;
begin
readln(x,y,z);
writeln('max = ',max(max(x,y),max(y,z)));
writeln('min = ',min(min(x,y),min(y,z)));
end.

Консультировал: Долгих Людмила
Дата отправки: 18.09.2008, 10:44
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 84180:

Вот это самое жестокое что может быть....я полностью не знаю что делать...помогите люди добрые..я знаю вы тут.....
Ввести двумерный массив D 3*5.Вычислить максимальный по модулю элемент (Dmax) и с помощью "под программы 2" построить массив D1=D max*D. Упорядочить его строки по возрастанию с помощью "под прогаммы 1".
"под прогамма 1". Тип F. Упорядочить по возрастанию элементы строки К матрицы.
"под программа 2". Умножение матрицы на скаляр.
Помогите люди добрые...
Заранее всем благодарен!!!!

Дата отправки: 25.04.2007, 18:12
Вопрос задал: Трусов Александр Евгеньевич
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Академик):

Здравствуйте, Трусов Александр Евгеньевич!

Загадочную запись про тип F я поняла как задать тип "матрица" с названием F, не знаю, насколько это правильно. Под подпрограммой подразумевается, видимо, процедура. Чтобы не отходить от ТЗ обозвала процедуры One и Two.

const m=3;
const n=5;
type F = array [1..m, 1..n] of integer; {описываем тип массива}
var d: F;
i, j, max: integer;
procedure One (var a: F); {подпрограмма 1 - сортировка методом пузырька}
var i, j, k, x: integer;
begin
for i:=1 to m do
for j := 2 to n do
begin
for k := n downto j do
if a[i, k-1]< a[i, k] then {если текущий элемент больше, меняем местами}
begin
x := a[i, k-1];
a[i, k-1] := a[i, k];
a[i, k] := x;
end;
end;
end;

procedure Two (var a: F; k: integer); {подпрограмма 2 - умножение матрицы на скаляр}
var i, j: integer;
begin
for i:=1 to m do
for j:=1 to n do
a[i,j]:= a[i,j]*k; {домножаем каждый элемент на скаляр k}
end;

begin
for i:=1 to m do
for j:=1 to n do
readln (d[i,j]);
max:= abs(d[1,1]);
for i:=1 to m do {ищем максимальное по модулю}
for j:=1 to n do
if abs(d[i, j])>max then max:= abs(d[i,j]);
Two (d, max); {вызываем процедуры (подпрограммы)}
One (d);
for i:=1 to m do
begin
for j:=1 to n do {выводим на экран}
write (d[i,j]);
writeln;
end;
end.

Консультировал: Киселёва Алёна aka Verena (Академик)
Дата отправки: 25.04.2007, 19:38
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Gh0stik (Академик):

Здравствуйте, Трусов Александр Евгеньевич!

В приложении код программы.

Несколько комментариев:
procedure pp1(k:integer;var x:mas); {упорядочивает k-ю строку по возрастанию}
procedure pp2(l:integer;var x:mas); {умножаем матрицу на скляр}
procedure prnMas(x:mas); {выводим матрицу на экран}

Good Luck!!!

Приложение:

Консультировал: Gh0stik (Академик)
Дата отправки: 25.04.2007, 19:41
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 180303:

Дорогие Эксперты! будьте добры помоч с реализацией ряда процедур....

вот список и заголовки их

Код :
const 
  StrOk=0; MemEr=1; LenEr=2; (это ошибки которые функции возвращают:0-все ок, 1-ошибка памяти, 2-ошибка длинны )
type 
  sting1=array[1..255] of char;  (концом строки считать символ с кодом 0)

Procedure InputStr(var st:string1)  {Ввод строки st с клавиатуры.}

Procedure OutputStr(const st:string1)      {Вывод строки st на экран монитора.}

Procedure InitStr(var st:string1; n: word)      {Выделение динамической памяти под строку st, содержажую от 0 до n символов.}

Procedure WriteToStr(var st:string1; s:string)     { Запись данных в строку st из строки s.}

Procedure WriteFromStr(var s:string; st:string1)      {Запись данных в строку s из строки st.}

Function Comp(s1,s2:string1; var fl:shortint):boolean      {Сравнивает строки s1 и s2. Возвращает true если s1=s2 и fl=0, если s1>s2 и fl=1, если s1<s2 и fl=-1.}

Procedure Delete(var S:String1; Index,Count:Word)      {Удаляет Count символов из строки S,начиная с позиции Index.}

Procedure Insert(Subs:String1;var S:String1; Index:Word)      {Вставляет подстроку SubS в строку S,начиная с позиции Index.}

Procedure Concat( const S1, S2:string1; var srez:string1)      {Выполняет конкатенацию строк S1 и S2; результат помещает в srez.}

Procedure Copy(S:String1;Index,Count:Word; var Subs:String1)    { Возвращает  подстроку Subs из строки S,начиная с позиции Index и длиной Count символов.}

Function Length(S: String1): Word      {Возвращает текущую длину строки S.}

Function Pos(SubS, S: String1): Word      {Возвращает позицию, начиная с которой в строке S располагается подстрока SubS}

function LastPost(s,s1:string):word.       {Назначение: поиск последнего вхождения подстроки s1 в строку s.
                                                                  Входные параметры: s,s1.
                                                                  Выходные параметры: нет.}



Буду очень признателен если поможите!

Дата отправки: 13.10.2010, 05:04
Вопрос задал: Юдин Евгений Сергеевич
Всего ответов: 1
Страница онлайн-консультации »


Консультирует lamed (Академик):

Здравствуйте, Евгений Сергеевич! Код в приложении. PascalABC. Поскольку из вопроса неизвестно, как возвращать ошибки, в программе они не использованы.

Код :
program p180303;
 uses
  Crt;

const
  StrOk=0;
  MemEr=1;
  LenEr=2;
{ это ошибки которые функции возвращают:0-все ок, 1-ошибка памяти, 2-ошибка длинны }

type
  string1=array[1..255] of char;
  {концом строки считать символ с кодом 0}

Procedure InputStr(var st:string1);
{ Ввод строки st с клавиатуры. }
var
  c: char;
  i: word;
begin
  c:= chr(0);
  i:= 1;

  c:= readkey;
  while (c<>chr(13)) do
    begin
      write(c);
      st[i] := c;
      inc(i,1);
      c:= readkey;
    end;
  st[i] := chr(0);
end;

Procedure OutputStr(const st:string1);
{ Вывод строки st на экран монитора. }
var
  i: word;
begin
  i:= 1;
  while (st[i]<>chr(0)) do
    begin
      write(st[i]);
      inc(i,1);
    end;
  writeln;
end;

Procedure InitStr(var st:string1; n: word);
{ Модель выделения динамической памяти под строку st, содержажую
  от 0 до n символов. }
var
  i: word;
begin
  i:=1;
  while (i<=n) do
    inc(i,1);
  st[i]:=chr(0);
end;

Procedure WriteToStr(var st:string1; s:string);
{ Запись данных в строку st из строки s. }
var
  i, j: word;
  len: word;
begin
  len := ord(s[0]);
  j:= 1;
  i:= 1;
  while i<= len do
    begin
      st[j] := s[i];
      inc(j,1);
      inc(i,1);
    end;
  st[j] := chr(0);
end;

Procedure WriteFromStr(var s:string; st:string1);
{ Запись данных в строку s из строки st. }
var
  i: word;
begin
  s:= '';
  i:= 1;
  while (st[i]<>chr(0)) do
    begin
      s:= s+st[i];
      inc(i,1);
    end;
end;

Function Comp(s1,s2:string1; var fl:shortint):boolean;
{ Сравнивает строки s1 и s2. Возвращает true если s1=s2 и
fl=0, если s1>s2 и fl=1, если s1<s2 и fl=-1. }
var
  i: word;
begin
  Comp := false;
  i:= 1;
  while (s1[i]=s2[i]) do
    begin
      if (s1[i]=chr(0)) then
        begin
          Comp := true;
          fl := 0;
          exit;
        end;
      inc(i,1);
    end;
  if (s1[i]>s2[i]) then
    fl := 1
  else
    fl := -1;
end;

Procedure Delete(var S:String1; Index,Count:Word);
{ Удаляет Count символов из строки S,начиная с позиции Index. }
var
  i, j: word;
begin
  i:= 1;
  while (s[i] <> chr(0)) and (i<Index) do
      inc(i,1);

  j:=1;
  while (s[i] <> chr(0)) and (j<=count) do
    begin
      inc(i,1);
      inc(j,1);
    end;

  j:= i-count;
  while (s[i] <> chr(0)) do
    begin
      s[j]:=s[i];
      inc(j,1);
      inc(i,1);
    end;
  s[j]:=chr(0);

end;

Procedure Insert(Subs:String1;var S:String1; Index:Word);
{ Вставляет подстроку SubS в строку S,начиная с позиции Index. }
var
  i, j: word;
  len1, len2: word;
begin
  len1:= 1;
  while (s[len1]<>chr(0)) do
    inc(len1,1);
  dec(len1,1);

  if (index<1) or (index>len1) then
    exit;

  len2:=1;
  while (subs[len2]<>chr(0)) do
    inc(len2,1);
  dec(len2,1);

  s[len1+len2+1]:=chr(0);
  i:= index;

  while (i<=len1) do
    begin
      s[i+len2]:= s[i];
      inc(i,1);
    end;

  j:=1;
  i:= index;
  while (i<index+len2) do
    begin
      s[i]:= subs[j];
      inc(j,1);
      inc(i,1);
    end;
end;

Procedure Concat( const S1, S2:string1; var srez:string1);
{ Выполняет конкатенацию строк S1 и S2; результат помещает в srez. }
var
  i,j: word;
begin
  i:= 1;
  while (s1[i]<>chr(0)) do
    begin
      srez[i]:=s1[i];
      inc(i,1);
    end;
  j:= 1;

  while (s2[j]<>chr(0)) do
    begin
      srez[i]:=s2[j];
      inc(i,1);
      inc(j,1);
    end;
  srez[i] := chr(0);
end;

Procedure Copy(S:String1;Index,Count:Word; var Subs:String1);
{ Возвращает подстроку Subs из строки S,начиная с позиции
Index и длиной Count символов. }
var
  i, j: word;
begin
  i:= 1;
  while (i<Index) and (s[i]<>chr(0)) do
    inc(i,1);

  j:= 1;
  while (i<Index+Count) and (s[i]<>chr(0)) do
    begin
      Subs[j] := s[i];
      inc(i,1);
      inc(j,1);
    end;
  Subs[j] := chr(0);
end;

Function Length(S: String1): Word;
{ Возвращает текущую длину строки S. }
var
  i: Word;
begin
  i:= 1;
  while (s[i] <> chr(0)) do
    inc(i,1);
  Length := i-1;
end;

Function Pos(SubS, S: String1): Word;
{ Возвращает позицию, начиная с которой в строке S располагается подстрока SubS }
var
  i,j: word;
begin
  i:= 1;
  j:= 1;
  while (s[i] <> chr(0)) do
    begin
      if (s[i]=subs[j]) then
        inc(j,1)
      else if (subs[j]=chr(0)) then
        begin
          Pos:=(i-j+1);
          exit;
        end
      else
        j:= 1;
      inc(i,1);
    end;
  if (subs[j]=chr(0)) then
    pos := i-j+1
  else
    pos := 0;
end;

Function LastPost(s,s1:string1):word;
{ Назначение: поиск последнего вхождения подстроки s1 в строку s.
Входные параметры: s,s1.
Выходные параметры: нет. }
var
  i,j: word;
begin
  i:= 1;
  j:= 1;
  LastPost:=0;
  while (s[i] <> chr(0)) do
    begin
      if (s[i]=s1[j]) then
        inc(j,1)
      else if (s1[j]=chr(0)) then
        begin
          LastPost:=(i-j+1);
          j:=1;
        end
      else
        j:= 1;
      inc(i,1);
    end;
  if (s1[j]=chr(0)) then
    LastPost := i-j+1
end;

var
  s1, s2, s4: string1;
  s3: string;
  fl: ShortInt;
begin
//  ClrScr;
//  writeln('start');
  
  InitStr(s1, 40);
  InitStr(s2, 20);
  InitStr(s4, 20);

  write('Строка s1 ');
  InputStr(s1);

  writeln;
  write('Строка s2 ');
  InputStr(s2);

  writeln;
  write('Строка s3 ');
  readln(s3);

  writeln;
  write('s1=');
  OutputStr(s1);
  writeln;
  writeln('length(s1)=', length(s1));

  WriteToStr(s1, s3);
  writeln;
  Write('s1<-s3=');
  OutputStr(s1);

  WriteFromStr(s3, s2);
  writeln;
  Write('s2->s3=', s3);

  writeln;
  Writeln('comp(s1,s1)=', Comp(s1,s1, fl), ' fl=', fl);
  Writeln('comp(s2,s1)=', comp(s2,s1, fl), ' fl=', fl);
  Writeln('comp(s1,s2)=', comp(s1,s2, fl), ' fl=', fl);

  s3:= 'Информатика';
  WriteToStr(s1,s3);
  OutputStr(s1);

  delete(s1, 3, 4);
  OutputStr(s1);

  WriteToStr(s2, 'форм');
  Insert(s2,s1,3);
  OutputStr(s1);

  Concat(s1,s2,s4);
  OutputStr(s4);
  
  Copy(s4,3,6,s1);
  OutputStr(s1);

  WriteToStr(s1, 'ИнформатикаИнформатикаИнформатика');
  WriteToStr(s2, 'форм');
  writeln(pos(s2,s1));
  writeln(LastPost(s1,s2));
  writeln(LastPost(s2,s1));

  writeln('OOPS');
end.

Если требуются уточнения, задавайте, пожалуйста, вопросы в мини-форуме.

Консультировал: lamed (Академик)
Дата отправки: 13.10.2010, 19:52

5
Я преогромно вам благодарен за проделанную работу.
-----
Дата оценки: 13.10.2010, 20:30

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное