Помощь - Поиск - Пользователи - Календарь
Полная версия: 4 задачи (последовательности и массивы)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
leaval
Здравствуйте!
Вот решил как говорится на старости лет получить высшее. Учусь заочно. Но последнее посещение учебного заведения, то бишь школы, было 16 лет назад. Так вот уважаемые, прошу вашей помощи, так как с pascal не в ладах был ещё в школе.

Вот задания:
1)Пусть дано натуральное число n. Получите наименьшее число вида 2k (k - верхний индекс), превосходящее n.
2)Пусть даны целые числа а1, а2, ..., аn (1,2,n - нижний индекс) среди которых могут быть повторяющиеся. Составьте новый массив из чисел, взятых по одному из каждой группы равных членов данной последовательности
3) Пусть даны вещественные числа x1 (1- нижний индекс), ..., х8. Получите квадратную матрицу порядка 8, образованную по правилу:

В скобке (мартица)
х1 х2 ... х8
х1 х2 ... х8 ( всё во второй степени)
... ... ... ...
х1 х2 ... х8 ( всё в восьмой степени)

4) Пусть смешано V1 литров воды температуры t1 с V2 литрами воды температуры t2. Составьте программу вычесления обьема и температуры образованной смеси.

Пока эти
Заранее благодарю всех кто примет участие в помощи!


Ответ уже был дан Freeman (большое спасибо) на 3 задание, вот его решение

 
uses crt;
const n=8;
var
b:array[1..n,1..n] of double;
i,j:byte;

begin
clrscr;
randomize;
for i:=1 to n do a[1,i]:=random(100);{zapolnit 4islami}

for i:=2 to n do
for j:=1 to n do a[i,j]:=a[1,j]*a[i-1,j];{zapolnit stepenyami}

for i:=1 to n do begin
for j:1 to n do write(a[i,j],' ');
writeln
end;

readkey;
end.

volvo
Про информативность заголовка в правилах читал? Еще раз перечитай!!!

да я уже переименовал.. она называлась "помогите в решении задач".
Думаю надо в правила внести "Один вопрос- одна тема"...
leaval
Модераторам. Ребята извините за мою тупость. Помогите если что, только тему не удаляйте пожалуйста. Ещё раз спасибо
Altair
Цитата
1)Пусть дано натуральное число n. Получите наименьшее число вида 2^k, превосходящее n.

var
i,n:integer;
begin
readln(n);
i:=2;
while i<=n do i:=i*2;
writeln(i);
readln
end.

Altair
Цитата
2)Пусть даны целые числа а1, а2, ..., аn (1,2,n - нижний индекс) среди которых могут быть повторяющиеся. Составьте новый массив из чисел, взятых по одному из каждой группы равных членов данной последовательности

не понял.
Проще говоря новый массив не должен содержать повторяющиеся элементы ?
или результат - множество чисел, которые в 1 массиве повторяются?
leaval
Altair - так написано задание в книге
volvo
Цитата
результат - множество чисел, которые в 1 массиве повторяются

yes2.gif Я именно так понял задание...

Что делаем для решения задачи?
1. Сортируем массив (любой, на выбор, метод из FAQ) ...
2. Проходим по отсортированному массиву:
...
Bubble(a, n); { Сначала - ТОЛЬКО сортировка }

{ а уж потом - все остальное }
i := 1; count := 0;
while i <= n do begin
T := 0;
repeat
inc(i); inc(T);
until (a[i-1] <> a[i]) or (i > n);

if T > 1 then begin
inc(count);
b[count] := a[i-1];
end;
end;
...
leaval
спасибо, вот Вам плюсик
leaval
Volvo то есть как я понял решение будет таким ( по пузырьковой сортировке)?

Type
arrType = Array[1 .. n] Of Integer;

Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
i := 1; count := 0;
while i <= n do begin
T := 0;
repeat
inc(i); inc(T);
until (a[i-1] <> a[i]) or (i > n);
Begin
if T > 1 then begin
inc(count);
b[count] := a[i-1];
end;
end;


тогда чем является j? или его надо убрать или заменить чем то?
volvo
To: leaval
no1.gif Сначала сортируем, а потом делаем то,что я написал... Посмотри еще раз наверху, я исправил...
klem4
Вот такой вариант для первой задачи мне кажется на больших числах будет быстрее :

uses crt;
const
eps=0.25;
var
n,k : word;
i : single;

begin

clrscr;

write('n='); readln(n);

i := -0.25;

repeat
i := i + eps;
k := round(ln(n)/ln(2) + i);
until exp(k*ln(2))>n;

writeln(exp(k*ln(2)):2:0);

readln;

end.
volvo
To: klem4
Это ты где такой изврат видел? blink.gif Что, shr/shl уже отменили? Зачем вещественные-то типы задействовать?
uses crt;
var
n, shift: word;
begin
clrscr;
write('n='); readln(n);

shift := 0;
while n <> 1 do begin
n := n shr 1; inc(shift);
end;
writeln(n shl succ(shift));

readln;
end.


Хотя это, в принципе, аналогично решению Altair

P.S. Тесты показали - метод klem4 работает в 10.75 раз медленнее, чем у Altairblum.gif

klem4: ну извините, это было только предположение, что то конечно силшком медленно :cry2:
leaval
Ребята простите за мой тупизм
Volvo так она должна выглядеть

Type
arrType = Array[1 .. n] Of Integer;

Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If ar[Pred(j)] > ar[j] Then { < }
Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;

i := 1; count := 0;
while i <= n do begin
T := 0;
repeat
inc(i); inc(T);
until (a[i-1] <> a[i]) or (i > n);

if T > 1 then begin
inc(count);
b[count] := a[i-1];
end;
end;



Volvo прости за назойливость, просто препода нет и приходится за короткое время готовится самому, а ещё есть 6 предметов. Так что у меня надежда на Вашу помощь, так как паскаль дается после работы очень тяжко
volvo
Вот так она должна выглядеть (значения N и A только для теста, если надо - меняй, если нужен ввод с клавиатуры - убери комментарии):
leaval
volvo - благодарчик
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.