Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
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;
Алгоритм самой задачи, думаю, проблем не вызывает?
Сегодня сдал третью и четвёртую задачку. Всё отлично, вроде и лёгкие, но за вчерашний вечер бы не додумался. Завтра ещё первую и вторую нузно принести, но в тетради, главное, что практику я уже сдал... Что бы я делал без помощи koi-8®. Отредактировано куратором: Lord_of_Darkness. Дата: 24.09.2006 1:34
помогите решить:
•Строки
Дана последовательность содержащая от 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)
Куратор темы Статус: Не в сети Регистрация: 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
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
--Vel--
К чему такие сложности ?
E1dar писал(а):
И ещё одна задача: Пусть n - целое число от 1 да 365. Присвоить целой m значение от 1 до 7 в зависимости от того, на какой день недели(понедельник, вторник, т.д.) приходится n-ый день невисокосного года, в котором первое января - среда.
Куратор темы Статус: Не в сети Регистрация: 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
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Питер!
Народ, прошу помощи, нужно сделать простенькую прогу, но чёто никак не вспомню мат. формулы для вычисления. Задание "Две прямые на плоскости заданы своими двумя точками. Найти точку их пересечения".
И ещё одно заданице, с факториалом:
"Для заданного с клавиатуры значения N найти (2•N+1)!! ", используя цикл "FOR ... DO"
Умоляю!!! Могу даж вебмани перевести за помощь!
Lord_of_Darkness спасибо за программы!
вот еще 2 программки которые нужно сделать:
1. подпрограммы
Разработать программы для выполнения над матрицей размера 5х5 операций в соответствии с вариантом. На печать вывести исходную матрицу и полученный результат с текстовым комментарием.
Цитата:
Вариант бла-бла: •Определение максимального значения среди элементов, находящихся под главной диагональю. •Удвоение всех значений исходной матрицы.
Примечание: Для пункта 1 исходную матрицу задать самостоятельно в виде типизированной константы. Для пункта 2 исходную матрицу сформировать используя RANDOM
2. организация модулей Разработать текст модуля и текст программы, вызывающей этот модуль. Порядок: •Создать модуль, откомпилировать его и получить TPU-файл. •Открыть новое окно, создать программу, использующую этот модуль.
Цитата:
Создать модуль, включающий в себя процедуру и функцию, разработанные в предыдущей работе, а также создать программу, вызывающую этот модуль.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения