• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачки на Pascal

  • Автор темы Автор темы kitty91
  • Дата начала Дата начала

kitty91

Ученик
Регистрация
14 Янв 2011
Сообщения
4
Реакции
0
Баллы
0
Задачки на Pascal

Организация доступа к динамической памяти

Определить: с какими переменными возможно и желательно работать как с динамическими? Изменить программу, включив работу с динамическими переменными:

program kvur;
var a,b,c, d, x1,x2: real;
begin
repeat
writeln ('Vvedi koefficienty KVUR (a<>0)');
write ('a='); readln(a);
write ('b='); readln(b);
write ('c='); readln(c);
until a<>0;

d:=b*b-4*a*c;
if d<0 then writeln ('net korney')
else begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln ('x1=',x1:5:2,' x2=',x2:5:2)
end;
readln;
end.


Опишите тип данных: указатель на данные типа <my_type>. Объявите переменные a, b названного типа. Выделите в динамической памяти участки, достаточные для размещения двух переменных типа <my_type> (применить разные способы). Введите в созданные динамические переменные некоторые значения. Выведите их на экран. Присвойте одному из указателей значение другого указателя (Какие предварительные действия нужно сделать? Осуществите их). Выведите значения динамических переменных на экран.
<my_type>:
1). real
 
Сортировки

Упорядочить положительные элементы массива по возрастанию, оставив остальные на своих местах.
 
Хеширование

Модифицировать программу работы с хеш-таблицей, хранящей информацию об абоненте (номер АТС, фамилия, имя, отчество), и выполняющей операции вставки новой информации, поиска фамилии по заданному номеру АТС, печати хеш-таблицы.

uses crt;
const n=10;
type THashItem = record
FIO: string [50];
Phone: string [6];
used: boolean;
end;
THashTable = array [0..n-1] of THashItem;
var ht:THashTable;
hi:THashItem;
size,num,i:integer;



procedure HashInit ( var ht: THashTable; var size: integer);
var i: 0..n; hi: THashItem;
begin
size:=0;
for i:=0 to n do
begin
hi.FIO:=''; hi.Phone:=''; hi.used:=false; ht:= hi
end;
end;

function HashAdd (var ht: THashTable; var size: integer; hi:THashItem):boolean;
var ind, i, error, c: integer; p: longint;
begin
val(hi.Phone,p,error);
ind:= p mod n;
if ht[ind].used=false then begin ht[ind]:=hi; HashAdd:=true; size:=size+1 end
else begin
c:=27; i:=0;

while (ht[ind].used=true) and (ht[ind].phone<>hi.phone) do
begin
i:=i+1;
ind:=(ind+c*i) mod n;
end;

if ht[ind].used=false then begin ht[ind]:=hi; HashAdd:=true; size:=size+1 end
else begin writeln('Add no, phone esist'); HashAdd:=false end
end;
end;

procedure HashFind ( var ht: THashTable; hi:THashItem);
var ind, i, error, c: integer; p: longint;
begin
val(hi.Phone,p,error);
ind:= p mod n;
c:=27; i:=0;
while (ht[ind].used=true) and (ht[ind].phone<>hi.phone) do
begin
i:=i+1;
ind:=(ind+c*i) mod n;
end;

if ht[ind].used=false then writeln ('phone no')
else writeln(ht[ind].FIO)

end;


begin

HashInit (ht,size);
repeat
Clrscr;
writeln ('1. Insert');
writeln ('2. Find');
writeln ('3. Print');
writeln ('4. exit');
write ('vvedi num='); readln (num);
case num of
1: begin
clrscr;
writeln ('vvedi FIO'); readln (hi.FIO);
writeln ('vvedi Phone'); readln (hi.Phone);
hi.used:= true;
if size=n then writeln ('Add no, size(HashTable)=n')
else if HashAdd (ht, size, hi) then writeln ('Info Add');
readkey;
end;
2: begin
clrscr;
writeln ('vvedi Phone'); readln (hi.Phone);
HashFind (ht, hi);
readkey;
end;
3: begin
clrscr;
for i:=0 to n-1 do
begin writeln (ht.FIO:15, ht.Phone: 8, ht.used) end;
readkey;
end;

end;
until num=4;
end.


1. Определить метод вычисления хеш-функции
2. Определить метод разрешения коллизий
3. Изменить метод вычисления хеш-функции
4. Изменить метод разрешения коллизий
 
Помогите, пожалуйста с задачками!!! буду очень благодарна!!!
 
Назад
Сверху