Помогите, пожалуйста, исправить ошибку в коде
помогите пожалуйста исправить ошибку в коде для задачи:
Перечислить все пары простых чисел-близнецов, не превосходящих заданного числа n, троичные представления которых получаются друг из друга записью цифр в обратном по-рядке (первая такая пара - это 5 и 7). вот сам код: Код: program zadacha_1; uses crt; type chisla=array[1..100]of integer; mas_ch=array[1..100] of string; var k,n:integer; sim:chisla; sim_tr,s_sim:mas_ch; procedure resheto(n:integer; var sim:chisla); {поиск простых чисел с применением решета Эратосфена} var i,j,p:integer; begin p:=1; for i:=1 to n do sim[i]:=i; for i:=1 to n do begin if sim[i]<>0 then inc(p); j:=i; while j<=n do if (sim[j] mod p = 0) and (sim[j]>p) then begin sim[j]:=0; inc(j); end else inc(j); end; sim[1]:=0; writeln('Sinmple numbers:'); for i:=1 to n do if sim[i]<>0 then write(sim[i],' '); end; procedure trancf(n:integer; sim:chisla; var sim_tr:mas_ch; var k:integer); {перевод найденных простых чисел в троичную систему} var i,x,num:integer; st,r:string; begin k:=1; for i:=1 to n do begin if sim[i]<>0 then begin num:=sim[i]; r:=''; repeat x:=num mod 3; str(x,st); r:=r+st; num:=num div 3; st:=''; until num=0; sim_tr[k]:=r; inc(k); end; end; writeln('k=', k); end; procedure revers(sim_tr:mas_ch; k:integer); {формирование массива чисел с обратным троичным представлением и поиск пар-близнецов по условию задачи} var i,j,l,g:integer; old, new:string; begin for i:=1 to k do begin old:=sim_tr[i]; new:=s_sim[i]; l:=length(old); for j:=1 to l do new[j]:=old[l-j]; end; writeln; writeln('Twins simple numbers: '); for i:=1 to k do for g:=1 to k do if s_sim[i]=sim_tr[g] then writeln(s_sim[i], '-' ,sim_tr[g]); end; BEGIN clrscr; write('n>13: '); readln(n); resheto(n,sim); trancf(n,sim,sim_tr,k); revers(sim_tr,k); readkey; END. |
Таня, когда Вам это нужно сделать? Начал было исправлять, но чувствую, уже под вечер соображаю плохо.
Вообще ошибок много. Во-первых, в процедуре revers Вы используете идентификатор new - это недопустимо, new - зарезервированное слово в Паскале. Потом абсолютно некорректно и даже невразумительно построена процедура перевода чисел в троичную систему. Она попросту не работает. Так что подумайте сами, а если не придумаете, я завтра вечером попробую отредактировать. |
спасибо))
по срокам так то до завтра но я думаю смогу перенести)) |
Цитата:
1. Косметика. Именовать одинаково параметры процедуры и глобальные (подставляемые в процедуру) параметры хоть и допустимо, но, с моей (и не только) точки зрения - неряшливость и дурной тон. Исправлено. 2. После прохождения процедуры Resheto никакой надобности в полном массиве уже нет, дальше мы имеем дело только с выбранными простыми числами. Поэтому в процедуре Resheto формируется массив найденных простых чисел длиной m и с ним продолжается работа. 3. Поиск инверсного троичного кода целесообразно проводить прямо в теле процедуры преобразования, в том же цикле, в котором формируется прямой код. В результате формируются два числовых (а не строковых!) массива, содержащие запись простых чисел в прямом и инвертированном троичном коде. Надобность в типе mas_ch, таким образом, отпадает. Ну вот как-то так. Если будут вопросы - буду рад ответить. Код:
program zadacha_1; |
огромнейшее спасибо)))
|
Часовой пояс GMT +4, время: 04:59. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.