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




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



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 20 из 50<  1 ... 17  18  19  20  21  22  23 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

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

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

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


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

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



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Shagrath
Хм... Если ещё не поздно, можешь решить первую задачу. Вот функции для "длинной" арифметики:
Код:
VAR
  N1, N2, result0       : String;
  overflow, l1, l2, a,
  digit                 : Integer;



Function Value(K : Char) : Integer;
  begin
    Value := Ord(K) - 48;
  end;


Function ChrDigit(K : Integer) : Char;
  begin
    ChrDigit := Chr(K+48);
  end;


Function More(N1, N2 : String) : Boolean;
  begin
    l1 := Length(N1);
    l2 := Length(N2);
    If l1 > l2 then begin
      More := True;
      Exit;
    end;
    If l1 < l2 then begin
      More := False;
      Exit;
    end;
    For l2 := 1 to l1 do begin
      If Ord(N1[l2]) > Ord(N2[l2]) then begin
        More := True;
        Exit;
      end;
      If Ord(N1[l2]) < Ord(N2[l2]) then begin
        More := False;
        Exit;
      end;
    end;
    More := False;
  end;


Function Add(K1, K2 : String) : String;
  begin
    N1 := K1; N2 := K2;
    l1 := Length(N1);
    l2 := Length(N2);
    If l1 < l2 then begin
      a := l2; l2 := l1; l1 := a;
      result0 := N2; N2 := N1; N1 := result0;
    end;
    result0 := '';
    overflow := 0;
    For a := 0 to l2-1 do begin
      digit := Value(N1[l1-a]) + Value(N2[l2-a]) + overflow;
      If digit > 9 then begin
        overflow := 1;
        Dec(digit, 10);
      end
      else overflow := 0;
      result0 := ChrDigit(digit) + result0;
    end;
    For a := l2 to l1-1 do begin
      digit := Value(N1[l1-a]) + overflow;
      If digit > 9 then begin
        overflow := 1;
        Dec(digit, 10);
      end
      else overflow := 0;
      result0 := ChrDigit(digit) + result0;
    end;
    If overflow = 1 then result0 := '1' + result0;
    Add := result0;
  end;


Function Sub(K1, K2 : String) : String;
  begin
    N1 := K1; N2 := K2;
    l1 := Length(N1);
    l2 := Length(N2);
    If l1 < l2 then begin
      a := l2; l2 := l1; l1 := a;
      result0 := N2; N2 := N1; N1 := result0;
    end;
    result0 := '';
    overflow := 0;
    For a := 0 to l2-1 do begin
      digit := Value(N1[l1-a]) - Value(N2[l2-a]) - overflow;
      If digit < 0 then begin
        overflow := 1;
        Inc(digit, 10);
      end
      else overflow := 0;
      result0 := ChrDigit(digit) + result0;
    end;
    For a := l2 to l1-1 do begin
      digit := Value(N1[l1-a]) - overflow;
      If digit < 0 then begin
        overflow := 1;
        Inc(digit, 10);
      end
      else overflow := 0;
      result0 := ChrDigit(digit) + result0;
    end;
    While (result0[1] = '0') and (Length(result0) <> 1) do Delete(result0, 1, 1);
    Sub := result0;
  end;


Function Divide(Y, X : String) : String;
  var
    digit, z, num       : Integer;
    X1, result          : String;
  begin
    If More(X, Y) then begin
                         Divide := '0';
                         Exit;
                       end;
    X1 := X;
    While not More(X1, Y) do X1 := X1 + '0';
    Delete(X1, Length(X1), 1);
    If Length(X1) = Length(Y) then num := Length(Y) - Length(X) + 1
                              else num := Length(Y) - Length(X);
    result0 := '';
    For z := 1 to num do begin
      X1 := X;
      While not More(X1, Y) do X1 := X1 + '0';
      If not More(X, Y) then Delete(X1, Length(X1), 1);
      digit := 0;
      While not More(X1, Y) do begin
        Y := Sub(Y, X1);
        Inc(digit);
      end;
      result0 := result0 + ChrDigit(digit);
    end;
    Divide := result0;
  end;


Function Multiply(X1, X2 : String) : String;
  var
    digit, z, w         : Integer;
    result, M           : String;
  begin
    If (X1 = '0') or (X2 = '0') then begin
                                       Multiply := '0';
                                       Exit;
                                     end;
    result := '0';
    For z := 1 to Length(X2) do begin
      digit := Value(X2[z]);
      M := '0';
      For w := 1 to digit do M := Add(M, X1);
      If M <> '0' then For w := Length(X2)-1 downto z do M := M + '0';
      result := Add(result, M);
    end;
    Multiply := result;
  end;

Алгоритм самой задачи, думаю, проблем не вызывает? :wink:


 

Member
Статус: Не в сети
Регистрация: 07.12.2005
Сегодня сдал третью и четвёртую задачку. Всё отлично, вроде и лёгкие, но за вчерашний вечер бы не додумался. Завтра ещё первую и вторую нузно принести, но в тетради, главное, что практику я уже сдал... Что бы я делал без помощи koi-8®.
Отредактировано куратором: Lord_of_Darkness. Дата: 24.09.2006 1:34


 

Member
Статус: Не в сети
Регистрация: 13.08.2004
помогите решить:
•Строки
Дана последовательность содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - пробел, за последним словом - точка. Вывести те слова последовательности, которые отличны от последнего слова.
•Нужен кусок кода, который бы делал это:
Преобразовывал массив таким образом чтобы сначала располагались все эл-ты отличающиеся от максимального не более чем на 20%, а потом все остальные.
спасибо...


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
stupid user

задание №1

есть ограничения какие-нибудь? Можно массив строк для выделения слов использовать, или нужно обойтись только одной исходной строкой?

задание №2

Код:
uses crt;
const
  ArrLen = 12;
var
  A: array [1..ArrLen] of real;
  max, dmax, tmp: real;
  i: integer;
  flag: boolean;
begin
  clrscr;
  randomize;
  writeln('Reference array');
  write('[');
  for i:=1 to ArrLen do
  begin
    A[i] := random(100);
    write(A[i]:2:1,'; ');
    if i=1 then max := A[i]
    else if max < A[i] then max := A[i];
  end;
  writeln(']');

  dmax:=abs(0.2*max); { 20% of MAX item }
  writeln('Max item is ',max:2:1,'; delta max is ',dmax:2:1);

  repeat
    flag:=true;
    for i:=1 to ArrLen-1 do
      if (abs(A[i]-max) >= dmax) and (abs(A[i+1]-max) < dmax) then
      begin
        tmp := A[i];
        A[i]:=A[i+1];
        A[i+1]:=tmp;
        flag:=false;
      end;
  until flag;

  writeln('Sorted array');
  write('[');
  for i:=1 to ArrLen do
    write(A[i]:2:1,'; ');
  writeln(']');
end.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 13.08.2004
Lord_of_Darkness, ограничено 50-ю словами. метод без разницы, главное чтобы работало :)


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
stupid user писал(а):
ограничено 50-ю словами. метод без разницы, главное чтобы работало Smile


ок, лови:


Код:
program StringParsing;
uses crt;
var
  ReferenceStr: string;
  words: array [1..50] of string[8];
  i, BegIndex, WordsCount : integer;
begin
  clrscr;
  ReferenceStr := 'it''s very very long string and it''s jokingly very.';
  TextColor(7);
  write('Referense string: ');
  TextColor(15);
  writeln(ReferenceStr);
  WordsCount := 0;
  BegIndex := 1;
  for i:=1 to Length(ReferenceStr) do
    if (ReferenceStr[i] = ' ') or (ReferenceStr[i] = '.') then
    begin
      Inc(WordsCount);
      words[WordsCount] := copy(ReferenceStr, BegIndex, i-BegIndex);
      BegIndex:=i+1;
    end;

  TextColor(7);
  write('Parsed words: ');
  TextColor(10);
  for i:=1 to WordsCount do
    write(words[i],'; ');
  writeln;

  TextColor(7);
  write('Selected words: ');
  TextColor(12);
  for i:=1 to WordsCount - 1 do
    if words[i]<>words[WordsCount] then
      write(words[i],' | ');
end.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

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


Последний раз редактировалось E1dar 12.03.2010 3:10, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 01.06.2003
Откуда: Pskov
E1dar
Цитата:
На мелких часах/минутах/секундах работает нормально(например 8 часов, 8 минут, 8 секунд), но потом полный бред идет.


Попробуй поменять:
Код:
h1,m1,s1:integer;

на
Код:
h1,m1,s1:longint;


Или добавь новую переменную:

Код:
Var  tmp:longint;
[...]
  tmp:=a div 3600 mod 24;
  h1:=tmp;
  tmp:=a div 60 mod 60;
  m1:=tmp;
  tmp:=a mod 60;
  s1:=tmp;


Думаю, должно помочь.

_________________
ПС: [13-06-2006] Идеальный скриншот BIOS'а ? Запросто ! // K.V.


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
E1dar
E1dar писал(а):
И ещё одна задача

Код:
var a,s integer;
begin
readln (s);
a:= (((s mod 7) + 1) mod 7) + 1;
writeln ('Day of Week is',a);
readln;
end.

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 01.06.2003
Откуда: Pskov
--Vel--

К чему такие сложности ? ;)

E1dar писал(а):
И ещё одна задача:
Пусть n - целое число от 1 да 365. Присвоить целой m значение от 1 до 7 в зависимости от того, на какой день недели(понедельник, вторник, т.д.) приходится n-ый день невисокосного года, в котором первое января - среда.


Код:
x:=(n mod 7)+(3-1)


n=1->3 -> среда
n=7->2 -> вторник
n=31->5 -> пятница

_________________
ПС: [13-06-2006] Идеальный скриншот BIOS'а ? Запросто ! // K.V.


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
xKVtor
xKVtor писал(а):
К чему такие сложности ?

К тому, что n mod 7 выдает 0..6 прибавляем 2 получаем 2..8 - и где же это день недели? Еще раз modом сдвинуть нужно

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 01.06.2003
Откуда: Pskov
--Vel--

Хм, точно. Но 2 mod'а это все равно перебор. :)

ИМХО так будет красивше:

Код:
x:=((n+1) mod 7)+1


1 -> 3
5 -> 7
6 -> 1
7 -> 2
31 -> 5

(2014-й год)

_________________
ПС: [13-06-2006] Идеальный скриншот BIOS'а ? Запросто ! // K.V.


 

Advanced member
Статус: Не в сети
Регистрация: 12.01.2004
xKVtor
xKVtor писал(а):
ИМХО так будет красивше

Согласен.
Хотел написать, что мой нагляднее, потом сам посмотрел - нифига не нагляднее. Что-то разучился я простыми вещами заниматься

_________________
Sapienti sat


 

Member
Статус: Не в сети
Регистрация: 01.06.2003
Откуда: Pskov
E1dar

Напоследок (если препод вдруг поинтересуется).

В общем случае, если год начинается с дня недели k (1..7):

Код:
x:=((n+(k-2)) mod 7)+1;


Для среды (как в исходном задании): k=3 => x:=((n+1) mod 7)+1;

_________________
ПС: [13-06-2006] Идеальный скриншот BIOS'а ? Запросто ! // K.V.


 

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


Последний раз редактировалось E1dar 12.03.2010 3:10, всего редактировалось 1 раз.

 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
E1dar
вот тебе причесанная и поравленная версия

Код:
program three;
uses crt;
var
   h, m, s, t, a, h1, m1, s1 : longint;
begin
      clrscr;
      write('Input start hours [0..23] ');
      readln(h);
      if h>23 then h := h mod 24
      else if h<0 then
      begin
        writeln('Error. Hours out of range!');
        exit;
      end;
      write('Input start minutes [0..59] ');
      readln(m);
      if m>59 then
      begin
        h:=h+(m div 60);
        if h>23 then h := h mod 24;
        m:=m mod 60;
      end
      else if m<0 then
      begin
        writeln('Error. Minutes out of range!');
        exit;
      end;
      write('Input start seconds [0..59] ');
      readln(s);
      if s>59 then
      begin
        m:=m+(s div 60);
        s := s mod 60;
        if m>59 then
        begin
          h := m div 60;
          m := m mod 60;
          if h>23 then h := h mod 24;
        end;
      end
      else if s<0 then
      begin
        writeln('Error. Secondss out of range!');
        exit;
      end;

  write('Input a flight time in seconds ');
  readln(t);

  a:=h*3600+m*60+s+t;
  h1:=a div 3600 mod 24;
  m1:=a div 60 mod 60;
  s1:=a mod 60;
  writeln('It come back on ',h1,':',m1,':',s1);
  readln;
end.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

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


Последний раз редактировалось E1dar 12.03.2010 3:10, всего редактировалось 1 раз.

 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
E1dar писал(а):
Как так получается?

избавился от переполнения + грамотная фильтрация ввода. вот в чем дело.
integer -32768 .. 32767
longint -2147483648..2147483647

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Питер!
Народ, прошу помощи, нужно сделать простенькую прогу, но чёто никак не вспомню мат. формулы для вычисления. :(
Задание "Две прямые на плоскости заданы своими двумя точками. Найти точку их пересечения".
И ещё одно заданице, с факториалом:
"Для заданного с клавиатуры значения N найти (2•N+1)!! ", используя цикл "FOR ... DO"
Умоляю!!! Могу даж вебмани перевести за помощь!
:bandhead: :beer: :weep:


 

Member
Статус: Не в сети
Регистрация: 13.08.2004
Lord_of_Darkness спасибо за программы!
вот еще 2 программки которые нужно сделать:
1. подпрограммы
Разработать программы для выполнения над матрицей размера 5х5 операций в соответствии с вариантом. На печать вывести исходную матрицу и полученный результат с текстовым комментарием.
Цитата:
Вариант бла-бла:
•Определение максимального значения среди элементов, находящихся под главной диагональю.
•Удвоение всех значений исходной матрицы.

Примечание:
Для пункта 1 исходную матрицу задать самостоятельно в виде типизированной константы.
Для пункта 2 исходную матрицу сформировать используя RANDOM

2. организация модулей
Разработать текст модуля и текст программы, вызывающей этот модуль.
Порядок:
•Создать модуль, откомпилировать его и получить TPU-файл.
•Открыть новое окно, создать программу, использующую этот модуль.

Цитата:
Создать модуль, включающий в себя процедуру и функцию, разработанные в предыдущей работе, а также создать программу, вызывающую этот модуль.


Примечание:
Исходную матрицу задать самостоятельно.

спасибо.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 20 из 50<  1 ... 17  18  19  20  21  22  23 ... 50  >
-

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


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

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


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

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