Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
nanotec
0 / 0 / 4
Регистрация: 06.08.2010
Сообщений: 24
#1

файлы - Pascal

22.08.2010, 22:05. Просмотров 303. Ответов 2
Метки нет (Все метки)

помогите пожалуйста найти ошибку в программе.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
program rims;
uses crt;
var f: text;
    S: string;
    pr: boolean;
    res,i: integer;
procedure openfile(var F: text);
var i: integer;
    S: string;
begin
    repeat
        write('write name of the file please: ');
        readln(S);
        clrscr;
        assign(F,S);
        {$I-}
            reset(F);
        {$I+}
        i:=IOResult;
        if i<>0 then writeln('ERROR! No.=',i,'.');
    until i=0;
end;
function proverka(var S: string): boolean;
var i,k: integer;
    ch: char;
    q: boolean;
begin
    q:=true;
    k:=length(S);
    for i:=1 to k do
    begin
        ch:=S[i];
        if not(ch in ['I','V','X','L','C','D','M',' ']) then q:=false;
    end;
    proverka:=q;
end;
procedure perevod(S: string; var res: integer);
var i,j,k: integer;
    ch: char;
    M: array [1..255] of integer;
begin
    k:=length(S);
    j:=1;
    for i:=k downto 1 do
    begin
        ch:=S[i];
        case ch of
            'I': begin
                    M[j]:=1;
                    inc(j);
                 end;
            'V': begin
                    M[j]:=5;
                    inc(j);
                 end;
            'X': begin
                    M[j]:=10;
                    inc(j);
                 end;
            'L': begin
                    M[j]:=50;
                    inc(j);
                 end;
            'C': begin
                    M[j]:=100;
                    inc(j);
                 end;
            'D': begin
                    M[j]:=500;
                    inc(j);
                 end;
            'M': begin
                    M[j]:=1000;
                    inc(j);
                 end;
        end;
    end;
    res:=M[1];
    for i:=1 to k-1 do
    begin
        if res>M[i+1] then  res:=res-M[i+1]
        else res:=res+M[i+1];
    end;
    writeln(S);
    for i:=1 to k do
        write(M[i],' ');
    writeln;    
end;
begin
    openfile(F);
    i:=1;
    while not(EOF(F)) do
    begin
        while not(EOLn(F)) do
        begin
            read(F,S);
            pr:=proverka(S);
            if not(pr) then writeln('ERROR!!!') else
            begin
                perevod(S,res);
                write('Result = ',res);
            end;
        end;
        readln(F);
        writeln;
    end;
    close(F);
    readln;
    clrscr;
end.
программа переводит числа из римской записи в десятичную, переводит нормально число DCLXVI, но неправильно XXXI и др.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2010, 22:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос файлы (Pascal):

файлы
Не подскажете где ошибка? program files; const nmax=10; ...

файлы
в общем есть текстовый файл, в нем 10 слов, как эти слова можно записать в...

ФАЙЛЫ
Если не трудно напишите пожалуйста любую программу с заданием к ней по файлам

файлы
имеется файл,который состоит из ФИО, 5 зачетов, 5 оценок. получить новый...

Файлы
1)Дан текстовый файл!!!!нужно создать 2 выходных файла:в один переписать первые...

Файлы
Текстовый файл F1 должен содержать не менее 10 строк. Скопировать в файл F2...

2
Puporev
Модератор
54136 / 41769 / 28880
Регистрация: 18.05.2008
Сообщений: 98,311
23.08.2010, 08:10 #2
Вы слегка все усложнили и в конце неверно вычисляете число. Посмотрите эту программу.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program rim_arab;
uses crt;
var a:string;
    i,j:integer;
    b:array[1..50] of integer;
    s:longint;
begin
clrscr;
writeln('Rimskoe chislo');
readln(a);
for i:=1 to length(a) do
    begin
      if not(a[i] in ['I','V','X','L','C','D','M'])
      then halt;
      if a[i]='I'then b[i]:=1;
      if a[i]='V'then b[i]:=5;
      if a[i]='X'then b[i]:=10;
      if a[i]='L'then b[i]:=50;
      if a[i]='C'then b[i]:=100;
      if a[i]='D'then b[i]:=500;
      if a[i]='M'then b[i]:=1000;
    end;
s:=0;
for i:=1 to length(a) do
   begin
     s:=s+b[i];
     if b[i-1]<b[i] then s:=s-2*b[i-1];
   end;
write(s);
readln;
end.
1
nanotec
0 / 0 / 4
Регистрация: 06.08.2010
Сообщений: 24
23.08.2010, 09:03  [ТС] #3
спасибо, изменил немного код и все получилось.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2010, 09:03
Привет! Вот еще темы с решениями:

Файлы
Если на диске А в каталоге VVV имеется файл 'R5.INC',то вывести на экран номер...

файлы..
Сформировать файл. Ввести в него последовательность символов. Уничтожить затем...

файлы(((
имеется текстовый файл.выяснить,имеется ли в нем строка,начинающаяся с буквы...

Файлы
Составте программу, в которой вводится с клавиатуры k строк, они записываются в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru