Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Задачки на Pascal (http://www.tehnari.ru/f41/t45397/)

kitty91 14.01.2011 23:02

Задачки на 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

kitty91 14.01.2011 23:04

Сортировки

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

kitty91 14.01.2011 23:06

Хеширование

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

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[i]:= 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[i].FIO:15, ht[i].Phone: 8, ht[i].used) end;
readkey;
end;

end;
until num=4;
end.


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

kitty91 14.01.2011 23:07

Помогите, пожалуйста с задачками!!! буду очень благодарна!!!


Часовой пояс GMT +4, время: 20:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.