Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Задачи на Turbo Pascal 7.0

Автор: XPEHOMETP
Дата сообщения: 23.06.2006 08:44
ratmi

В общем, проделал я описанные выше манипуляции и аж изумился, до чего простая формула вышла. Если Ma - медиана к стороне a, то получаем:

Ma = sqrt((b^2 + c^2 - (a^2)/2)/2)

И это все!!!
Автор: ShIvADeSt
Дата сообщения: 25.06.2006 13:20
daMIR

Цитата:
Возможно ли в Паскале сделать задачу- чтение имен файлов (по условиям/либо все) из определенной категории?

Аналогично как и в Дельфи - рекурсией, uses Dos вроде и FindFirst, FindNext. Бери любой рекурсивный алгоритм на дельфи по перебору каталогов и файлов и просто смотри как в паскале объявлены типы и функции.
Автор: Mickey_from_nsk
Дата сообщения: 28.06.2006 08:08
ShIvADeSt

Цитата:
Аналогично как и в Дельфи - рекурсией, uses Dos вроде и FindFirst, FindNext.

Если не ошибаюсь, это не рекурсия, это - итерация.
Автор: SERGE_BLIZNUK
Дата сообщения: 28.06.2006 15:12

Цитата:
Если не ошибаюсь, это не рекурсия, это - итерация.

Ошибаетесь... Именно рекурсия...
procedure ReadDir( DirName : string )
begin
Ищем...
если нашли каталог то
ReadDir( DirName+'\'+ Найденный_каталог )
end;

daMIR
Если нужен простенький примерчик - пишите - кину...
Автор: Nightcrawler
Дата сообщения: 28.06.2006 15:13

Цитата:
Если не ошибаюсь, это не рекурсия, это - итерация.

ЭТО итерация, чтоб по каталогам внутрь бежать юзается РЕКУРСИЯ
Автор: pascaler
Дата сообщения: 16.07.2006 05:38
Плиз помогоите кто знает...

Дана непустая последовательность символов(знаки операций отношения: =,<>,>,<,>=,<=). Требуется пострить и напечатать два множества, элементами которого являются встречающися в последовательности. При вводе с клавиатуры проверить на допустимость вхождения в данное множество.
Над полученными множествами выполнить все операции над множествами и вывести результат на экран.

Ну всё вроде бы как просто...но чё-та я не пойму: как во множестве можно задать знаки <>,<=,>=
Автор: daMIR
Дата сообщения: 16.07.2006 22:56
pascaler
Может через АСКИ коды? Хотя может я и ошибаюсь...
Автор: ShIvADeSt
Дата сообщения: 17.07.2006 01:13
pascaler
Цитата:
Ну всё вроде бы как просто...но чё-та я не пойму: как во множестве можно задать знаки <>,<=,>=

Никак, ибо множество только перечисляемые типы понимает, а строки (2 символа - строка) к ним не относятся, строй на основе массива строк свой класс, или просто опиши операции работы с множествами, там все фонарно, простое сравнивание.
вот пример принадлежности элемента множеству.
function IsIn(Mn:MyMnog;El:MyElem;Dimen:integer):boolean;
var
i:integer;
begin
IsIn:=False;
for i:=1 to Dimen do
if El=Mn[i] then begin
IsIn:=True;
Exit;
end;
end;
Автор: pascaler
Дата сообщения: 17.07.2006 05:36
ShIvADeSt
Благодарю!

Ну вот у меня получисля следующий код(я решил отказаться от этих <>,<=,>=...меня за это не съедят ):

Uses
Crt;
Var
Base:set of char;
New1:set of char;
New2:set of char;
Slozenie:set of char;
Raznost: set of char;
Umnozenie:set of char;
Stroka:string;
x,y,i:byte;
Begin
ClrScr;
Base:=['<','>','='];
while y<>1 do
begin
Writeln('Mnozestvo1: ');
Readln(stroka);
for i:=1 to length(stroka) do
begin
if stroka[i] in base then
begin
New1:=New1+[stroka[i]];
x:=x+1;
if x>0 then y:=1;
end;
end;
end;
y:=0;
while y<>1 do
begin
Writeln('Mnozestvo2: ');
Readln(stroka);
for i:=1 to length(stroka) do
begin
if stroka[i] in base then
begin
New2:=New2+[stroka[i]];
x:=x+1;
if x>0 then y:=1;
end;
end;
end;
Slozenie:=New1+New2;
Raznost:=New1-New2;
Umnozenie:=New1*New2;
Readln;
End.

А как вывести содержимое моножеств Slozenie,Raznost,Umnozenie на экран?
Автор: DITARS
Дата сообщения: 30.07.2006 00:16
Поскажите , пожалуйста, что я не так делаю, должны нулевые значения каждого столбца меняться на максимальные, а у меня меняется только последний столбец, а остальные без изменений

Цитата:
{В квадратной матрице S[5,5] в каждом столбце
заменить элемент равный нулю максимальным
элементом этого же столбца.}
uses wincrt;
var S: array[1..5,1..5] of integer;
Smax:integer;
i,j,n,m: integer;
begin
write(' M=');
readln(m);
write(' N=');
readln(n);
writeln('***');
for i:=1 to m do
for j:=1 to n do
read(S[i,j]);
Writeln;
Writeln(' S(MxN):');
Writeln;
for i:=1 to M do begin
for j:=1 to N do
Write(S[i,j]:7);
writeln;
end;
for j:=1 to n do
Smax:=S[1,j];
for i:=1 to m do
begin
if Smax<S[i,j] then Smax :=S[i,j];
end;
for i:=1 to m do begin
if S[i,j]=0 then S[i,j]:= smax;
end;
writeln('novi massiv x');
for i:=1 to n do
begin
for j:=1 to m do
write(s[i,j]:3,' ');
writeln;
end;
end.

Автор: RedPromo
Дата сообщения: 30.07.2006 01:48
DITARS
Вот тебе решение.
Переделаная твоя прога а запутался ты с циклами.

Цитата:

var S: array[1..5,1..5] of integer;
Smax:integer;
i,j,RowCount,ColCount: integer;
begin
write('Col M=');
readln(ColCount);
write('Row N=');
readln(RowCount);
writeln('***');
for i:=1 to ColCount do
    for j:=1 to RowCount do
begin
write('Enter the Array [',i,',',j,']=');
readln(S[i,j]);
end;

Writeln;
Writeln(' S(MxN):');
Writeln;
for i:=1 to RowCount do
begin
for j:=1 to ColCount do
Write('[',j,',',i,']=',S[j,i]:7,' ');
writeln;
end;

for i:=1 to ColCount do
begin
SMax:= 0;
    for j:=1 to RowCount do
        if Smax<S[i,j] then Smax :=S[i,j];

    for j:=1 to RowCount do
        if S[i,j]=0 then S[i,j]:=Smax;
End;
writeln('novi massiv x');
for i:=1 to RowCount do
begin
for j:=1 to ColCount do
        write('[',j,',',i,']=',s[j,i]:3,' ');
writeln;
end;
Readln;

end.

Автор: DITARS
Дата сообщения: 30.07.2006 14:55
RedPromo, благодарю за помощь, все работает.
Автор: Vantesmrbin
Дата сообщения: 21.08.2006 14:38
ShIvADeSt ,

Цитата:
по второй задаче, ты уверен что на ТП? если да, то под виндой точно не удастся реализовать (так как все дос задачи стартуют в собственных адресных пространствах),
-несколько непонятно... А Wind задачи тогда как стартуют ? ну да ладно-не так важно.

Дело то в том ,что 2-я прога требует ввод с клавиатуры :

Цитата:
Идея:Автоматизированный ввод данных
Прога 1 сформировала строку ABCD
Другая Прога 2 (не мною писаная) просит ввести с клавиатуры
какую-то строку в текстовое поле и нажать Ok!.
Можно сделать так,чтобы Прога 1 передавала в Прогу 2 строку ABCD,
предварительно определив,что Прога 2 активна? В данном случае
необходимость в ручном вводе отпадает!!!


знать бы ,как организован клавиатурный буфер,как к нему адресоваться и записывать в него данные-и задача была бы решена.
Не знаешь,как это будет выглядеть на TP 7.0 ?

прога 2 ведь не мною писана,на каком языке-не знаю и писана под Wind.
внутренняя структура проги 2 неизвестна,так что единственное (на мой взгляд) решение и самое универсальное -некий эмулятор клавиатуры
Автор: Jokerjar
Дата сообщения: 21.08.2006 15:08
Vantesmrbin, а обязательно это делать именно на TP? В том же Делфи твою идею осуществить в 5 сек, имхо
Автор: Vantesmrbin
Дата сообщения: 21.08.2006 15:23
все же очень хотелось бы на TP 7.0 ,поскольку задачка лишь часть другой программы
(процедура) . но можно и в Делфях (хотя паскаль мне ближе - с Делфи не сдружился),
а дальше как-нить состыкую.
Вообще,я и решению на делфи буду очень рад-с такой задачей сталкиваюсь впервые.
Подкинешь исходник ?
Зарание спасибо.

А определение активности проги2 необязательно,хотя желательно
Автор: Jokerjar
Дата сообщения: 24.08.2006 12:12

Цитата:
А определение активности проги2 необязательно,хотя желательно


Ищешь хэндл окна, если есть, значит прога запущена...
Автор: jONES1979
Дата сообщения: 01.09.2006 21:30

Цитата:
Oleg87
Степень если я не ошибаюсь пишется ^n


^ - это оператор ссылки(reference).

для возведения в степень в delphi появилась функция power,
а в паскале надо вычислять через логарифмы
Автор: MotorDima
Дата сообщения: 04.09.2006 18:44
Умоляю помогите!!! Решите задачю до 6-го надо пожалуйста!!! я Вас прошу завал ж..а полнейшая...

1.Для двоих квадратных матриц А(n*n) и В(k*k) найти минимальные элементы, которые разположены над главной диагональю(диагональные элементы считать), и их индексы
Поиск минимальных элементов оформить в виде процедуры...
2.Для квадратной матрицы А( * ),найти вектор, элементы которого равняються сумме элементов рядов в матрице, под главной диагональю..
(в виде функции)
Пожалуйста прошу вас..помогите..

Автор: MoonFox
Дата сообщения: 06.09.2006 13:47
[more=Код]
Код: const
N = 5; { Размерность массива A (изменить на то что нужно) }
K = 7; { Размерность массива B }

type
TItem = Integer; { Тип элементов массивов (изменить, если не целые числа) }
TVector = array[1 .. 16384] of TItem; { Служебный тип для представления матриц произвольной размерности как вектора внутри процедур }

procedure FindMinItem(var Matrix; Size: Integer; var MinValue: TItem; var X, Y: Integer); { На входе передаем матрицу (подразумевается квадратная), ее размер и переменные для возврата минимального значения и его индекса }
var
M: TVector absolute Matrix; { "финт ушами": рассматриваем переданную через нетипизированный параметр Matrix матрицу как плоский массив достаточно большой длинны }
I, J: Integer;
begin
X := 1; Y := 1; { Первый элемент - кандидат на минимальное значение }
MinValue := M[Pred(Y) * Size + X]; { Чтобы пересчитать индексы матрицы на индекс вектора, надо умножить уменьшенный на единицу номер строки на размер матрицы и прибавить номер столбца }
for I := 2 to Size do { Перебираем столбцы со 2-ого (первый элемент мы уже просмотрели) }
for J := 1 to I do { И строки с первой до главной диагонали }
if M[Pred(J) * Size + I] < MinValue then { Если нашли очередной минимум, то запоминаем его значение и индексы }
begin
X := I; Y := J;
MinValue := M[Pred(Y) * Size + X];
end;
end;

procedure CombineVector(var Matrix; Size: Integer; var Result); { На входе матрица (подразумевается квадратная) и размер, на выходе вектор сумм }
var
M: TVector absolute Matrix; { см. выше }
R: TVector absolute Result;
I, J: Integer;
begin
for I := 1 to Size do { Обнуляем вектор сумм }
R[I] := 0;
for I := 1 to Size do { Идем по столбцам матрицы }
for J := I to Size do { И строкам ниже главной диагонали }
R[J] := R[J] + M[Pred(J) * Size + I]; { И суммируем нужные значения }
end;

procedure PrintMatrix(var Matrix; Size: Integer); { Процедура для печати матрицы }
var
M: TVector absolute Matrix;
I, J: Integer;
begin
for J := 1 to Size do
begin
for I := 1 to Size do
Write(M[Pred(J) * Size + I] : 5);
WriteLn;
end;
end;

var
A: array[1 .. N, 1 .. N] of TItem;
B: array[1 .. K, 1 .. K] of TItem;
V: array[1 .. N] of TItem;
MinValue: TItem;
I, J: Integer;

begin
Randomize; { Заполнение массивов случайными значениями }
for I := 1 to N do
for J := 1 to N do
A[I, J] := Trunc(Random * 1000);
WriteLn('*** Matrix A ***');
PrintMatrix(A, N);
for I := 1 to K do
for J := 1 to K do
B[I, J] := Trunc(Random * 1000);
WriteLn('*** Matrix B ***');
PrintMatrix(B, K);
FindMinItem(A, N, MinValue, I, J);
WriteLn('Min value of upper items from matrix A is ', MinValue, ' found at position [', I, ', ', J, ']');
FindMinItem(B, K, MinValue, I, J);
WriteLn('Min value of upper items from matrix B is ', MinValue, ' found at position [', I, ', ', J, ']');
CombineVector(A, N, V);
WriteLn('Vector of sums of lower items from matrix A:');
for I := 1 to N do
Write(V[I] : 5);
end.
Автор: baidach
Дата сообщения: 13.09.2006 13:11
Народ помогите прогу сделать иль как её хоть делать я уже не фига не помню =((

Дано описание вида:
type Ref= ^Real;
Vector = Array [1..100] of Ref;

Считая, что все элементы вектора X отличны от Nil, построить логическую функцию S_a_m_e (X), которая проверяет, есть ли в векторе X хотя бы две одинаковые ссылки.

Пивчанское с меня!...
Автор: MoonFox
Дата сообщения: 13.09.2006 13:46

Код: type
Ref = ^Real;
Vector = array [1 .. 100] of Ref;

function S_a_m_e(var X: Vector): Boolean;
var
I, J: Integer;
begin
Result := False;
for I := 1 to 99 do
for J := I + 1 to 100 do
if X[I] = X[J] then
begin
Result := True;
Exit;
end;
end;
Автор: CrackMe
Дата сообщения: 15.09.2006 18:48
Делаю инсталлятор с помощью inno setup с связи с чем вопрос : каким образом определить что запущенн определённый процесс и как его убить средствами паскаля
Автор: ShIvADeSt
Дата сообщения: 16.09.2006 02:36
CrackMe
Цитата:
Делаю инсталлятор с помощью inno setup  с связи с чем вопрос : каким образом определить что запущенн определённый процесс и как его убить средствами паскаля

Никак, паскаль не может определить запущенную программу под виндой, используй дельфи.
Автор: CrackMe
Дата сообщения: 16.09.2006 11:52
ShIvADeSt
Правельно ли я понимаю, что паскаль в принципе не может задействовать winapiи другие вин-функции?
Автор: ALeXkRU
Дата сообщения: 16.09.2006 14:17
CrackMe
семерка не может. Поддержку виндов добавили только в версию (Turbo Pascal for Windows)
Правда она просуществовала как-то оч. недолго... Помнится была хорошая книжка по этому Паскалю Нейла Рубенкинга "Turbo Pascal for Windows. Techniques and Utilities" (в 2 томах).
Автор: Ramazan
Дата сообщения: 16.09.2006 15:26
ALeXkRU
Смотря какая семерка. Есть версия "Borland Pascal with Objects 7.0", которая может создавать приложения для реального и защищенного режима, а также для Windows (правда, Win16). Так что вызов функций API из паскаля - задача реальная (другое дело, что можно найти способ обойтись без подобных "извращений").
Автор: Jon X
Дата сообщения: 17.09.2006 08:49
Я второй день изучаю Turbo Pascal и хочу узнать, как записать в паскале x в 6 степени и корень 3 степени из x. И какой лучше взять справочник по изучению паскаля?
Автор: Ramazan
Дата сообщения: 17.09.2006 14:21
Jon X

Цитата:
x в 6 степени

X * X * X * X * X * X
А вообще стоит написать функцию типа

Цитата:

function Power(Base, Exponent: Double): Double;
begin
if Exponent = 0.0 then
Power := 1.0 { n**0 = 1 }
else if (Base = 0.0) and (Exponent > 0.0) then
Power := 0.0 { 0**n = 0, n > 0 }
else
Power := Exp(Exponent * Ln(Base));
end;

Тогда x в степени 6 запишется как Power(x, 6), а корень 3 степени как Power(x, 1/3)
Автор: 1nb0lz
Дата сообщения: 17.09.2006 17:04
Помогите plzzz c задачкой!
Вывести на печать таблицу n значений функции y=|a*x*x+b*x+c| при изменении x от x1 до x2 c шагом h=(x2-x1)/(n-1)
Буду оч. благодарен =)
Автор: Ramazan
Дата сообщения: 17.09.2006 20:30
1nb0lz
[more=Модель]
const
a = ...;
b = ...;
с = ...;
x1 = ...;
x2 = ...;
n = ...;
h = (x2 - x1)/(n - 1);
var
x: Double;
begin
x := x1;
while x <= x2 do
begin
writeln('F(x)=', abs(a*x*x+b*x+c));
x := x + h;
end;
end.
Чего тут сложного?
[/more]

Страницы: 1234567891011121314

Предыдущая тема: VC++ vs. Delphi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.