уии, спасибо, заработало!))))
мыслила вроде правильно, только несколько корявей.
сейчас задачи с файлами начнутся, а там совсем кошмар >< в общем, скоро еще напишу)
уии, спасибо, заработало!))))
мыслила вроде правильно, только несколько корявей.
сейчас задачи с файлами начнутся, а там совсем кошмар >< в общем, скоро еще напишу)
ну вот и опять я прошу помощи..)
создать модуль для работы с типом TMType=Longint
процедуры и ф-ции осуществляют:
открытие файла и заполнение случайным образом
считывание из файла в переменную данного типа
нахождение в файле позиции с нужными данными
закрытие файла
тупить начинаю прямо с начала... заполнять "случайным образом" видимо надо с помощью ф-ции random, но ведь она берет числа из типа word, а он уже, чем longint.. и вообще с нуля начинается, а нужно ведь и отрицательные.
вообще там еще был вариант с типом Char, это вообще меня убило)
считывание-закрытие-открытие вроде несложно.
Привет, smb. Вот, смотри, какой модуль получился. Давай тогда сначала отдельно про функцию Random в типах Char и LongInt.
В типах Char функция Random делается довольно просто. Там применяется функция Chr, которая вместро числа подставляет соответствующий символ по таблице. Например Chr(80) будет равно 'P', Chr(84) будет равно 'T'. Есть также функция Ord, которая, наоборот, вместо символов подставляет соответствующие числа.
Насчёт типа LongInt. Ты верно заметила, что функция Random позволяет выбрать только числа, которые соответствуют типу Word.Код:{функция не имеет параметров и просто возвращае один из 256 символов} function RandChar : Char; var A : Byte; begin A := Random(256); {A - случайное число от 0 до 255} RandChar := Chr(A); end;
В этом случае можно поступить следующим образом:
1) Сделать первое случайное число в пределах типа Word.
2) Сделать второе случайное число в пределах типа Word.
Оба числа будут в пределах от 0 до 65535 (или от 0000 до FFFF в 16-ой системе счисления).
3) Первое число умножить на 65536 (или на 10000 в шестнадцатеричной системе). Получится что-то вроде 450B 0000 (последние четыре цифры обязательно будут нулями, так как умножили на круглое число).
4) Прибавить к нему второе неумноженное. В результате получится число от 0000 0000 до FFFF FFFF - т.е. как раз соответствующее типу LongInt.
Получится, что мы собрали случайное число LongInt из двух случайных чисел Word, переведя цифры одного из них в более старшие разряды и приплюсовав к нему другое.
Вычисления в программе удобнее производить в шестнадцатеричном формате. Для этого перед числами ставится знак $.
Важно отметить, что в функции Random можно ставить число не больше 65535 и в результате самое большое число, которое может получиться - это 65534, т.е. на единицу меньше. Поэтому чтобы перекрыть весть диапазон от 0000 до FFFF нужно ещё рандомно прибавлять либо 0 либо 1 (т.е. прибавлять к числуКод:{функция не имеет параметров и просто возвращает случайное число в диапазоне типа LongInt} function RandLongInt : LongInt; var A, B : LongInt; begin A := (Random($FFFF) + Random($2)) * $10000; B := (Random($FFFF) + Random($2)); RandLongInt := A + B end;
Random($2) ).
Об отрицательных числах волноваться не надо, так как в памяти компьютера целые числа такого типа представляются таким образом, что знак определяется первой (слева) цифрой числа. Если большее или равно 8, то число отрицательной. Таким образом, например, 95A3 0010 - отрицательное, а 200A 0002 - положительное. Поэтому в данном случае числа будут и положительными, и отрицательными.
Теперь сам модуль. Он получился примерно таким.
Это текст программы с примером использования процедур и функций модуля.Код:unit Files; interface type TMType = Longint; procedure OpenAndFill(var F : Text); {открыти и заполнение} procedure ReadFromFile(var F : Text; var V : TMType; P : Integer); {считывание в переменную V из позиции P} function FindInFile (var F : Text; V : TMType) : Integer; {поиск данных соответствующих значению переменной V} procedure CloseFile (var F : Text); {закрытие файла} implementation {Описание процедур и функций} procedure OpenAndFill(var F : Text); function RandLongInt : LongInt; {вложенная функция для случайных чисел LongInt} var A, B : LongInt; begin A := (Random($FFFF) + Random($2)) * $10000; B := (Random($FFFF) + Random($2)); RandLongInt := A + B end; var I, L : Integer; begin L := Random(41) + 10; {число данных в файле случайное - от 10 до 50} Rewrite(F); {открываем файл для записи} for I := 1 to L do begin Write(F, RandLongInt); {записываем случайное число} Writeln(F); {новая строка} end; end; procedure ReadFromFile(var F : Text; var V : TMType; P : Integer); var I : Integer; begin I := 1; Reset(F); {открываем файл для чтения} While(EOF(F) = False) and (I < P) do {спускаемся до нужной позиции или до конца файла} begin Readln(F); I := I + 1; end; Read(F, V); {записываем данные из позиции P в переменную V} end; function FindInFile(var F : Text; V : TMType) : Integer; var A : TMType; I : Integer; B : Boolean; {показывает, если данные найденнны} begin I := 1; B := False; Reset(F); While(EOF(F) = False) do {пока не дошли до конца файла} begin Read(F, A); if A = V then {если данные соответствуют значению переменной V, прекратить поиск} begin B := True; break; end; I := I + 1; Readln(F); end; if B = True then FindInFile := I {вернуть функции значение номера строки} else FindInFile := 0; end; procedure CloseFile (var F : Text); begin Close(F); {закрытие файла} end; begin Randomize; {в этом модуле есть функция Randomize, в самой программе её писать будет не нужно} end.
Наверняка ты знаешь, но на всякий случай напомню, что имя сохраняемого файла модуля должно совпадать с именем модуля в начеле, в нашем случае Files. Он сохранится в файл Files.tbu. При использовании модуля в среде разработки Pascal в меня Options->Directories нужно указать путь к модулям.Код:program Prog; uses Files; var V : TMType; F : Text; begin Assign(F, 'C:\Pascal\textfile.txt'); OpenAndFill(F); ReadFromFile(F, V, 10); Writeln(V); WriteLn(FindInFile(F,V)); CloseFile(F); end.
Если нужно что-нибудь ещё, буду рад помочь. =)
If there were no clouds, we should not enjoy the Sun
Натуральное число с "n" цифр является числом Амстронга , если сумма его цифр, возведенных в "n-ю'' степень, равняется самому числу( например, 153=1^3+5^3+3^3= 1+125+27) Написатьпрограмму. которая выводит все числа Амстронга, которые состоят из двух, трьох и четырех цифр.
Ting
Уже очень давно перешла на сишку, а про Паскаль почти забыла. Но, поскольку других вариантов решения все - равно никто не предложил, напишу вам свой. Я не знаю, какие средства программирования вам можно использовать, а какие нет, поэтому написала без использования функций. Должно работать, если нигде не ошиблась, возможности проверить у меня нет. Чуть что - пишите.
Program Armstrong;
Uses crt;
Var i, a, c1, c2, c3, c4, sumc:integer;
Begin
ClrScr;
for i:=10 to 9999 do
begin
a:=i;
if (a < 100) then
begin
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1 + c2*c2;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
if ( a < 1000) then
begin
c3 := a mod 10;
a := a div 10;
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1*c1 + c2*c2*c2 + c3*c3*c3;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
if ( a < 10000) then
begin
c4 := a mod 10;
a := a div 10;
c3 := a mod 10;
a := a div 10;
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1*c1*c1 + c2*c2*c2*c2 + c3*c3*c3*c3 + c4*c4*c4*c4;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
end;
ReadKey;
End.
Пойдет?
Заданы логический вектор a={a1,a2,...,An,} и вещественный вектор x={X1,X2,...,Xn}. Преобразовать вектор х по правилу: если ai имеет значение TRUE, то Xi возвести в куб и поделить на 10, в противном случае изменить знак Xj на противоположный.
кто знает, как решать? плииз...очень нужно!!!!!
Помогите решить
Даны целые числа а1,...,а4 и целочисленная матрица А(4х4). Заменить нулями в матрице элементы с четной суммой индексов, равные a1,...,a4.
=(
Виктор_89
Вектор в Паскале - это обычный одномерный массив, что ли?
Или в Паскале есть какой-то такой тип?
Еще раз повторюсь, что не уверена в работоспособности кода, т.к. нет возможности проверить. Но на первых несколько взглядов должно работать. Если есть ошибки, пишите, постараюсь разобраться.
Program Vect;
Uses crt;
Const max = 100;
Var
a:array[1..max] of boolean;
x:array[1..max] of real;
n,i:byte;
Begin
ClrScr;
randomize;
n:=0;
repeat
WriteLn ('Введите размер массива');
ReadLn (n);
n:=n+1;
until (n > max);
WriteLn ('Логический массив(исходный): ');
for i:=1 to n do
begin
a[i] := random(2);
Write (a[i], ' ');
end;
WriteLn;
WriteLn ('Исходный вещественный массив: ');
for i:=1 to n do
begin
x[i] := random (21) - 42;
WriteLn (x[i], ' ');
end;
WriteLn;
for i:=1 to n do
begin
if a[i] == true then
begin
x[i]:= x[i]*x[i]*x[i];
x [i] := x[i].0/10;
end
else
x[i]:= -1 * x[i];
end;
WriteLn('Преобразованный вещественный вектор: ');
for i:=1 to n do
WriteLn(x[i],' ' );
ReadKey;
End.
Виктор_89
В задаче про матрицу просто не поняла условия. Расшифруйте.
Ting
Незачто, обращайтесь рада, что после такого перерыва смогла что - то написать. Было бы интересно ,если бы вы сказали, что не работало?
Program Armstrong;
Uses crt;
Var i, a, c1, c2, c3, c4, sumc:integer;
Begin
ClrScr;
for i:=10 to 9999 do
begin
a:=i;
if (a < 100) then
begin
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1 + c2*c2;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
if ( a < 1000) then
begin
c3 := a mod 10;
a := a div 10;
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1*c1 + c2*c2*c2 + c3*c3*c3;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
if ( a < 10000) then
begin
c4 := a mod 10;
a := a div 10;
c3 := a mod 10;
a := a div 10;
c2 := a mod 10;
a := a div 10;
c1 := a;
sumc = c1*c1*c1*c1 + c2*c2*c2*c2 + c3*c3*c3*c3 + c4*c4*c4*c4;
if (sumc = i) then WriteLn(i, " -число Армстронга ");
end;
end;
ReadKey;
End.
ОПИШИТЕ ПО ШАГОВО ЗАДАЧУ ПЛИЗ
Ting
Программа работает? Правильно работает? Или ты пытаешься найти ошибку?
Если работает, тогда в чем проблема? Не можешь посмотреть, что означают отдельные операторы Паскаля? Здесь же все прозрачно. Скажи, что именно тебе не понятно.
Всё работает правильно... Просто нужны коментарии к прграмме..
Ting
Коротко: в программе цикл по всем двух - трех - четырех - значным числам. Для каждого числа, в зависимости от того, сколько в нем цифр (определяется условиями if) выделяются все эти цифры (при помощи div и mod), затем... что там... складываем все цифры числа в соответствующей степени. Сравниваем с самим числом. Все.
Если у тебя есть КОНКРЕТНЫЙ вопрос, т.е. ты пробовал разобраться в коде, но не понял, как работает какой - то конкретный кусочек, это другой вопрос.
К сожалению, с программированием могут помочь, только если твой вопрос покажется интересным. Разжевывание же по полочкам этой программы скучно, т.к. прога элементарная. Не жди, что кто - то решит твои проблемы ,особенно если тебе лень даже смотреть на код, не то, что писать его.
Если вдруг ты не знаешь, что означает какой - либо из операторов Паскаля, написанных мной в этой программе, то это не ко мне, это сюда.
На будущее:
учимся спрашивать
учимся гуглить
Не обижайся на резкость, иные программеры могут и резче ответить.
Idea and creation: fuldon (aka miXei) © 2000-2015
Powered by vBulletin® Version 4.2.6 by vBS Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. |