Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 19:30   #1
stalker123a4
 
Регистрация: 19.12.2011
Сообщений: 3
По умолчанию Динамическая структура (списки)

помогите пожалуйста...
задача:
есть список чисел в 2-ой СС(системе счисления), надо преобразовать в 16-ую СС...
Есть программа преобразования из 2 сс в 16 сс..но не списком..
Цитата:
uses
CRT;
const
a: string[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWX YZ'; {задаём строку для поиска
в ней символов}
cc2=2;
cc=16;
var
n: real;
rez, s, s2, s3, s4: string;
t, ind, k, l, t2: integer;
{процедура для разделения дробной и целой части числа}
procedure Del(var ss: string);
var
i: integer;
begin
s2:=copy(ss,1,pos('.',ss)-1); {присваиваем строке s2 с первого символа по индекс "."-ки -1 (т.е. целую часть)}
delete(ss, 1,pos('.',ss)); {удаляем с первой позиции по ind элементы из строки
(т.е. целую часть + ".")}
s3 := ss; {остаток исходной строки заносим в s3 (т.е. дробную часть)}
end;
{функция для перевода (целой части числа) из любой СС в 10-ю}
function ToDec(ss2: string; cc: byte): integer;
var
i, n, sum: integer;
begin
sum := 0;
n := length(ss2); {присваиваем n - длину строки ss}
for i := 1 to n do {идём по строке}
begin
dec(n); {уменьшаем счётчик на 1}
sum := sum + round((pos(ss2[i], a) - 1) * exp(ln(cc) * n)); {суммируем число (найденное в
строке по позиции символа-1 (pos(ss[i],a)-1)) в степени dec(n)}
end;
ToDec := sum;
end;

{функция для перевода целой части числа из 10-й в любую сс}
function Cel(d: real; c: integer): string;
var
s: string;
n2: integer;
begin
n2 := round(int(d)); {берём целую часть от числа}
s := ''; {инициализируем переменную}
repeat
s := ((a[n2 mod c + 1]) + s); {пока число не будет равно нулю берём целую часть при
делении числа на основание и берём остаток + 1 от деления целой части на 16, записываем
результат посимвольно в строку s}
n2 := n2 div c;
until (n2 = 0);
Cel := s;
end;
{функция для проверки может ли быть это число в заданной системе счисления}
Function prov(c:integer;s:string):boolean;
Var
i,kol,j:integer;
begin
kol:=0;
for i:=1 to c do {идём по строке а (где с-заданная система счисления)}
begin
for j:=1 to length(s) do {идём по строке s (заданному числу)}
if s[j]=a[i] then {если символ нашего числа равен символу из строки а то}
inc(kol); {увеличиваем счётчик на 1}
end;
if kol=length(s) then {если кол-во символов=длине строки (т.е. все символы в этой СС то) }
prov:=true {истина}
else {иначе}
prov:=false; {ложь}
end;

{перевод (дробной части) из произвольной сс в 10-ю}
function drob2(ss: string; c: integer): real;
var
i: integer;
sum: real;
begin
for i := 1 to length(ss) do {идём по строке (по дробной части)}
sum := sum + (pos(ss[i], a) - 1) * exp(ln(c) * -i); {умножаем позицию символа строки -1
на онование системы счисления в степени -i}
drob2 := sum;
end;
begin
ClrScr;
repeat
write('ввод числа в ', cc2, '-й СС: ');
readln(s);
s4:=s;
if pos(',',s)<>0 then {если в строке есть "," то}
s[pos(',',s)]:='.'; {заменяем в строке , на . (для перевода в действительное число)}
t2:=pos('.',s); {позиция точки в строке}
val(s,n,l); {переводим в действительное число}
Del(s); {разбиваем на дробную и целую части строку}
if not prov(cc2,s2) or not prov(cc2,s3) then {если дробная или целая части заданы не верно (т.е. true) то выводим сообщение}
write('Некорректное число.Повторите ')
until prov(cc2,s2) and prov(cc2,s3); {проверка на соответствие числа заданной СС}
write('Введите точность: ');
readln(t);
begin
if t2=0 then {если в строке нет .}
rez := Cel(ToDec(s3, cc2), cc) {переводим сначала 2-ой в 10-ю сс, а затем из
10-й в 2-ую}
else
rez := Cel(ToDec(s2, cc2), cc);
end;
write('Число ',s4,'_',cc2,' в ',cc,'-й системе счисления:=',rez); { THE END }
readkey
end.
и есть процедура добаление списка и печать списка...помогите пожалуйста соединить))
Цитата:

procedure AddElem(var spis1:List;znach1:TInf);
var
tmp:List;
begin
if spis1=nil then
begin
GetMem(spis1,sizeof(TList));
tmp:=spis1;
end
else
begin
tmp:=spis1;
while tmp^.next<>nil do
tmp:=tmp^.next;
GetMem(tmp^.next,sizeof(TList));
tmp:=tmp^.next;
end;
tmp^.next:=nil;
tmp^.data:=znach1;
end;


procedure Print(spis1:List);
begin
if spis1=nil then
begin
writeln('‘??a®? ?aaa.');
exit;
end;
while spis1<>nil do
begin
Write(spis1^.data, ' ');
spis1:=spis1^.next
end;
end;

Последний раз редактировалось stalker123a4; 19.12.2011 в 19:32.
stalker123a4 вне форума Ответить с цитированием
Старый 19.12.2011, 22:24   #2
stalker123a4
 
Регистрация: 19.12.2011
Сообщений: 3
Вопрос

поможете,нет?
stalker123a4 вне форума Ответить с цитированием
Старый 19.12.2011, 22:27   #3
stalker123a4
 
Регистрация: 19.12.2011
Сообщений: 3
По умолчанию

или хотя бы объясните как брать элемент из списка и работать им?
stalker123a4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая структура данних Leshii Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2011 14:11
динамическая структура Тимурка Помощь студентам 0 20.04.2011 17:37
Динамическая структура. triasoft Фриланс 5 02.06.2010 01:47
Динамическая структура Nitriyc Помощь студентам 0 18.12.2009 17:51
динамическая структура o4arova6ka90 Помощь студентам 0 17.10.2009 14:05