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

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

letka 25.11.2014 15:22

Программа на Паскале
 
В файле numbers.dat записаны два числа: одно в восьмеричной системе, а другое — в шестнадцатеричной. Причем в первой строке файла расположено число 1<=N<=1000 — количество восьмеричных цифр в первом числе, во второй строке — само восьмеричное число, в третьей строке записано число M — количество шестнадцатеричных цифр во втором числе, в четвертой строке — само шестнадцатеричное число (данные корректны). Цифры, большие 9, при этом обозначаются заглавными латинскими буквами A, B, C и т.д. Требуется написать программу, которая будет сравнивать данные числа между собой и выводить на экран знак <, > или =, в зависимости от результата сравнения.
Например, если входной файл был таким:
2
13
1
C
то результат должен быть следующим:
<

Vladimir_S 25.11.2014 20:14

А 1000-зачное число - не жирно будет? Откровенно говоря, даже не знаю, как с такими строками управиться в Паскале. Но если устроят максимально 255-значные числа, то, например, так:
Код:

Var
 S8,S16:String;
 N8,N16:Byte;
 R8,R16:Real;
 f:Text;

Function N8to10(L:Byte; S:String):Real;
var
 k:Byte;
 N10,p,r:Real;
begin
 k:=0;
 p:=1;
 N10:=0;
 Repeat
  Case S[L-k] of
  '0': r:=0;
  '1': r:=1;
  '2': r:=2;
  '3': r:=3;
  '4': r:=4;
  '5': r:=5;
  '6': r:=6;
  '7': r:=7;
  end;
  N10:=N10+r*p;
  Inc(k);
  p:=p*8;
 Until k=L;
 N8to10:=N10;
end;

Function N16to10(L:Byte; S:String):Real;
var
 k:Byte;
 N16,p,r:Real;
begin
 k:=0;
 p:=1;
 N16:=0;
 Repeat
  Case S[L-k] of
  '0': r:= 0;
  '1': r:= 1;
  '2': r:= 2;
  '3': r:= 3;
  '4': r:= 4;
  '5': r:= 5;
  '6': r:= 6;
  '7': r:= 7;
  '8': r:= 8;
  '9': r:= 9;
  'A': r:=10;
  'B': r:=11;
  'C': r:=12;
  'D': r:=13;
  'E': r:=14;
  'F': r:=15;
  end;
  N16:=N16+r*p;
  Inc(k);
  p:=p*16;
 Until k=L;
 N16to10:=N16;
end;

Begin
 Assign(f,'numbers.dat');
 Reset(f);
 Readln(f,N8);
 Readln(f,S8);
 Readln(f,N16);
 Readln(f,S16);
 Close(f);
 R8:=N8to10(N8,S8);
 R16:=N16to10(N16,S16);
 if R8>R16 then writeln('>') else
 if R8<R16 then writeln('<') else
 writeln('=');
 Readln
End.


letka 26.11.2014 15:09

Пишет Встречено 'Var', а ожидалось procedure

Vladimir_S 26.11.2014 16:09

Цитата:

Сообщение от letka (Сообщение 1083107)
Пишет Встречено 'Var', а ожидалось procedure

Та-ак. АВС, конечно? Тогда добавьте первую строку
Program TTTT;
(имя, конечно, поставьте своё, какое нравится). В нормальном Паскале это не требуется.

letka 26.11.2014 17:07

набираю в нормальном- пишет файл не найден напротив Reset(f);
Не может найти путь?

Vladimir_S 26.11.2014 19:45

Цитата:

Сообщение от letka (Сообщение 1083132)
набираю в нормальном- пишет файл не найден напротив Reset(f);
Не может найти путь?

А Вы файл-то создали? Это нужно сделать заранее. И желательно прописать к нему полный путь в команде Assign.

letka 27.11.2014 18:05

БООльшое спасибо! Вы меня спасли)tehnobanka


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

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