• XSS.stack #1 – первый литературный журнал от юзеров форума

Чуваки помогите плз.

Trinux

HDD-drive
Пользователь
Регистрация
07.02.2005
Сообщения
49
Реакции
0
В технаре практические по Паскалю, а я вот 2 задачи чёт ваще рорубить немогу.

1. Написать программу, вычисляющую целую отрицательную степень числа.

2. Натуральное число, в записи которого N цифр, называется числом Армстронга. Если сумма его цифр возведённая в степень N, равна самому числу. Найти все такие числа от 1 до K.
 
Trinux
2. Натуральное число, в записи которого N цифр, называется числом Армстронга. Если сумма его цифр возведённая в степень N, равна самому числу. Найти все такие числа от 1 до K.
Число 123. 3 цифры в записи. Сумма цифр 6. Возводишь 6 в 3 степень и сравниваешь с 123.
 
вобщем алгоритм такой, извиняюсь за мой паскальский :) года 3 уже не програмил на делфях а тока на ссях
Код:
for i=1 to K        do begin
temp2 = i;
while ( celaya_chast > 0) 
do begin

celaya_chast = temp2%10 (кароче не помню но смысл что деление на 10 и берем целую часть)
drobnaya_cahst = temp2/10...(нахождения дробной части от деления на 10 есть функция)
stepen = stepen +1;
summa_cifr = summa_cifr+drobnaya_cahst;
temp2 = temp2 % 10; // опять же целую часть от деления находим
end 
if (summa_cifr^stepen == i) do выводим куда надо число end
// обнуляем все наши промежуточны епеременные в while 
 celaya_chast  = 0;
stepen =0;
.
.
.
end
                          end
а там уже сам доработаешь
 
Ниже приведены две функции для работы с числами Армстронга:
Function IsArmstrong(n: LongInt): Boolean;
Возвращает True если переданное ей в качестве аргумента число является числом Армстронга
Procedure GetArmstrongs(n: integer);
Распечатывает все n-значные числа Армстронга

Код:
function Power(n, k: Integer): LongInt;
var
  p: LongInt; i: Word;
begin
  p := 1;
  for i := 1 to k do
    p := p * n;
  Power := p
End;

function IsArmstrong(n: LongInt): Boolean;
var
  Weight: Array[0 .. 9] Of LongInt;
  i, j: Integer; s: LongInt;
begin
  i := -1; s := n;
  while s > 0 do begin
    Inc(i);
    Weight[i] := s mod 10;
    s := s div 10
  end;

  for j := 0 to i do
    s := s + Power(Weight[j], Succ(i));
  IsArmstrong := (s = n)
end;

procedure GetArmstrongs(n: integer);
var
  Weight: Array[0 .. 9] Of LongInt;
  k, x, min, max, s, p: LongInt;
begin
  for k := 0 to 9 do
    Weight[k] := Power(k, n);

  min := Power(10, Pred(n));
  max := Pred(10 * min);

  for x := min to max do begin
    p := x; s := 0;
    for k := 1 to n do begin
      Inc(s, Weight[p mod 10]);
      p := p div 10
    end;

    if s = x then
      WriteLn(x, ' - Armstrong')
  end
end;


var
  n: 1 .. 9;

begin
  repeat
    Write('n [1 .. 9] = '); ReadLn(n)
  until n In [1 .. 9];

  GetArmstrongs(n);

  WriteLn('1741725: ', isArmstrong(1741725))
end.
 
p.s. Маркиз, найдете в коде mod, div :)

но, что меня убило, так это инкремент. В жизни бы так не написала =\
 
Парни большое спасибо!) очень помогли!

Я бы на твоем месте убрала подпрограммы и чуть упростила код - за версту виден стиль..На этом многие попадаются на зачетах.

п.с. (другой раз обращайся- "дамы и господа", а то...... "чуваки"=\)
 
Вводим данные(a,B)...
Считываем строку(x,y)...
Рассчитываем скалярное произведение и записываем результат в массив... затем опять проходим входной файл считываем следующую строку... и так до тех пор, пока не обработаем все значения входного файла. Ну а потом обрабатываем полученное, например пузырьковым методом...
Обработав, записываем всё в выходной файл...

>>Требования(особенно последнее) выносят мозг...

Подпрограммы = процедуры ;) На счёт меток - без комментариев... Ну и раз нельзя использовать глобальные переменные значит используй локальные...
 
вообще-то в паскале разрешено вложенное описание процедур =)
Остальное в вашем задании достаточно тривиально
 
ViP-K1LLeR
Собственно опять возникает вопрос, как в основном теле программы передавать что-то из одной процедуры к другой, не используя глобальные переменные(т.е вообще не юзать основной раздел var).
Использовать процедуры с параметрами.
Непонял смысла использования вложенных процедур.

lisa99
вообще-то в паскале разрешено вложенное описание процедур =)
Остальное в вашем задании достаточно тривиально
IMO Forward удобнее.



Код:
for i:=0 to 99 do
    begin
        readln(f, t[i]);
        point := pos(',', t[0]);
        val((copy(t[i], 0, point-1)), k[0][i], error);
        val((copy(t[i], point+1, 10)), k[1][i], error);
    end;
IMO удобнее таг
Код:
j: integer;
for i:=0 to 99 do
    begin
        read(f, j);
        k[0][i]:= j;
        read(f, j);
        k[1][i]:= j;
    end;
Если проверяешь ошибки при исп. val, проверяй IOResult)
 
Использовать процедуры с параметрами.
например?для данного ТЗ
 
)
дальше?
область видимости переменных между процедурами? м?)
 
lisa99
область видимости переменных между процедурами?
Вызов тербуемых процедур с парметрами. Локальная переменная 1 процедуры передаёцца другой.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх