Когда есть массив из строк, то при добавлении нового элемента, он подсоединяется к предыдущей строке. А как же их разграничить.
Код
write('Введите количество сортируемых цифр ( не больше 10 ) --> ');
readln(n);
for I:=1 to length(n) do
begin
chislo2:=ord(n[i])-48;chislo:=chislo*10; chislo:=chislo2+chislo;
end;
if (chislo > 10) or (chislo=0) or (chislo2 < 0) or (chislo2 > 9) then
writeln('Некорректное значение');
k:=0;
for j:=1 to chislo do
begin
write('Введите ', j, '- ое число --> ');
readln (a[j]);
for s:=1 to length(a[j][s]) do
begin
ch2:=ord(a[j][s])-48; ch:=ch*10; ch:=ch2+ch; end;
writeln(ch);
....
если они разграничиваются ( ведь массив же ), то где же моя ошибка ? =((
бред какой-то..
можете задание сказать для того, что бы было понятно о чем речь вообще.. мне потому что не понятна ваша затея...
от пользователя получают 10 цифр ( их тип string ), далее из переводят в число (без val'а) по алгоритму : к последней цифре прибавляется предпоследняя*10 + предпредпоследняя*100 и т.д. , в итоге получается число
далее идет заполнение массива числами ( которые сначала, являются строками) потом по этому же алгоритму идет их перевод в число. Далее я хочу эти числа занести уже в массив цифровой , а далее их сортировка методом "пузырька".
Но в проге у меня получается, что когда я заношу в строковый массив строку, она у меня переводится в число, но потом при занесении следущеей строки, число прибавляется к предыдущему ( хотя по идее не должно ). И как итог вместо массива из строк ( а потом и из чисел ) получается одна большая строка ( или число ).
Надеюсь я объяснила понятно
Смотри-ка сюда...
Function strInt(s:string):longint;
var
i:byte; ss:longint;
begin
ss:=0;
for i:=1 to length(s) do
begin
ss:=ss+(ord(s[i])-48)*trunc(Exp((length(s)-i)*Ln(10)));
end;
strInt:=ss;
end;
var
a:array[1..10] of string;
b:array[1..10] of longint;
i:integer;
begin
for i:=1 to 10 do readln(a[i]);
for i:=1 to 10 do b[i]:=strInt(a[i]);
{...}
end.
Функция strInt(s:string):longint; переводит из строки в число.. ошибки не учитываются...
дальше сама прога проста.. вводится 10 строк и переводится в 10 чисел..
на основе того ,что я дал, ты можешь все сделать дальше..
еще вопросы есть?
Цитата(Oleg_Z @ 23.02.05 21:54)
Смотри-ка сюда...
Function strInt(s:string):longint;
ss:=ss+(ord(s[i])-48)*trunc(Exp((length(s)-i)*Ln(10)));
еще вопросы есть?
Спасибики!
Тока один еще вопрос: а после транк'а что за выражение такое, т.е. что оно делает по алгоритму перевода строки в число?
возведение в степень. Есть такая формула.
В данном случае возвожу 10 в степень соответствующую..
Перенесено из темы "Формирование вектора"этот алгорит проверки на "не число" не в цикле у меня работает. А потом у меня должно происходить формирование вектора. И здесь такая ситуация-> с первым числом все нормально, а потом происходит выход из цикла. Идет переход на формирование вектора.
Код
...
begin
for i:=1 to chislo do
begin
Z:
write('Введите ', i, '- ое число --> ');
readln (a[i]);
for j:=1 to length (a[i]) do
begin
l:=ord (a[i][j])-48;
if (l< 0) or (l> 9) then begin writeln('Некорректное значение');
goto Z; end; end;
for i:=1 to chislo do
b[i]:=PEREVOD(a[i]);
SORTIROVKA (chislo,b);
end;
...
почему это происходит? и как правильно доделать эту задачу. Мне нужно, чтобы дальше было - "введите <cлед. число> и т.д.
Цитата(>hamka< @ 24.02.05 13:47)
как правильно доделать эту задачу. Мне нужно, чтобы дальше было - "введите <cлед. число> и т.д.
Я же предлагал: написать свою функцию чтения строки... Что-то типа вот этого:
Код
Uses Crt;
...
Function myRead: String;
var s: string;
ch: char;
begin
s := '';
repeat
ch := readkey;
if ch in ['0' .. '9'] then
begin
write(ch); s := s + ch
end;
until ch = #13;
writeln; myRead := s
end;
...
{ в основной программе: }
for i:=1 to chislo do
begin
write('Введите ', i, '- ое число --> ');
a[i] := myRead;
end;
{ далее по тексту }
Теперь пользователь просто не сможет ввести те символы, которые он вводить не должен...
Так же это практически всю программу придется переписывать. А у меня уже все практически готово =(( Даж проверку на max значение сделала, когда можно вводить какие угодно символы. И все работает +) Тока когда в цикл подставляю, идет обработка тока первого элемента и все. Может можно как-нибудь сделать, чтобы не переписывать
И еще такой вопросик. В программе я хочу проверить нажатую клавишу на <Enter>
Что я должна написать ?
Код
if n=……? then writeln.
как символ это не представить. А как символ из аски < Enter> как называется? Еще я прочитала про какие-то коды опроса клавиатуры =)).
Что это такое ?
Цитата(>hamka< @ 24.02.05 15:51)
В программе я хочу проверить нажатую клавишу на <Enter>
Что я должна написать?
А что я в предыдущем посте писал?
Цитата
repeat
ch := readkey;
if ch in ['0' .. '9'] then
begin
write(ch); s := s + ch
end;
until ch = #13;
Это что такое, если не проверка, нажат ли <Enter>
Цитата(>hamka< @ 24.02.05 15:51)
как символ это не представить
Объединено из темы: "Enter не работает"Код
begin
clrscr;
main:
writeln;
write('Введите количество сортируемых цифр ( не больше 10 ) --> ');
readln(n);
for j:=1 to length (n) do
begin
l:=ord (n[j])-48;
if (l< 0) or (l> 9) then begin writeln('Некорректное значение');
goto main; end; end;
goto Dalee;
Хелп! Почему этот кусок кода не реагирует на нажатие <Enter> как на некорректное значение? Ведь раньше все работало, а по мере увеличения проги работать перестало! Теперь просто переход на новую строчку и вылет из программы. Что делать?
Продолжайте обсуждение своей задачи в одном топике
"жуть. " (С)
1. убрать метки.
2. показать весь код.
3. тогда поговорим.
Вот программа, которая не работает. не знаю почему =)) не вижу я своих ошибок.
она простая. многие в моей группе ее за 2 часа написали. причем у них программа работала даже с ошибками в коде, которые видели все. а у меня...
я плачу =((
а вот собственно и задание.
Получение от пользователя до 10 ( и 10) целых чисел. Сортировка , вывод на экран.
все элементы-целые простые числа. Цель -> максимальная защита "от дурака", т.е. хоть ногами по клавиатуре прыгай, но программа должна быть полностью рабочей ( без каких-либо вылетов)
Нет уж, увольте ... Разбираться в такой программе просто несерьезно... Сплошные GOTO... Избавитесь от них, тогда пожалуйста. А так - :no:
вот программа. работает по заданию. Тестил в BPW если что...
можно топтать клаву, все равно работает.
Если встречаются символы, просто игнорирует их.
Код
Const
Count=10;
Type
arrType = Array[1 .. Count] Of Longint;
Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If ar[Pred(j)] > ar[j] Then { < }
Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;
Function strInt(s:string):longint;
var
i:byte; ss:longint;
setc:set of char;
begin
setc:=['0'..'9'];
ss:=0;
for i:=1 to length(s) do
begin
If s[i] in setc then ss:=ss+(ord(s[i])-48)*trunc(Exp((length(s)-i)*Ln(10)));
end;
strInt:=ss;
end;
var
s:string;
a:array[1..Count] of string;
b:arrtype;
i,n:integer;
begin
write('Сколько будем вводить чисел:'); readln(n);
For i:=1 to n do readln(a[i]); {ввод 10 чисел}
For i:=1 to n do b[i]:=StrInt(a[i]); {переводим в числа}
Bubble(b,n); {сортируем}
clrscr;
for i:=1 to n do writeln(b[i]); {вывод на экран отсортирвоанных чисел}
end.
Вот моя модифицированная программа, но она кажеЦа не работает вообще =))
Такая глючная. Ужас!
если набрать число, то вводится тока одно. При наборе букв, вообще вылетает. Недочетов масса. Мож как нибудь можно свою передедать? Там ведь только на <Enter> не реагирует. + цикл не проходит . ( LABA_1)
а чем не устраивает тот вариант что я предложил?
может там просто что-то не понятно тебе?
ну, во-первых, все-таки вылетает.
потом у меня программа диалоговая, т.е. если не цифры - сообщение и повторный ввод. А в этой все воспринимается. И самое главное "вылетает"
Плиз, помогите кто-нить передалать мою, чтобы не было гоуту, и чтобы работало
Мне надо сдавать уже в четверг. Это вопрос гордости Ж)
1. она не вылетает.
2. а исправить программу для повторного ввода слабо???
ВЫЛЕТАЕТ! Я тож проверяла =))
А буквы она позволяет вводить! А исправлять - это все-равно, что переписывать, а в своей, я хоть понимаю, что делаю ;)
Значит так... Или здесь приводятся тесты для программы, или я закрываю тему. Переделывать никто ничего не будет, т.к. кроме автора никто разобраться в _той_ программе не сможет...
ну вот с повторением ввода..
Код
Const
Count=10;
Type
arrType = Array[1 .. Count] Of Longint;
Procedure Bubble(Var ar: arrType; n: integer);
Var i, j, T: Integer;
Begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If ar[Pred(j)] > ar[j] Then { < }
Begin
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T
End
End;
Function strInt(s:string):longint;
var
i:byte; ss:longint;
setc:set of char;
begin
setc:=['0'..'9'];
ss:=0;
for i:=1 to length(s) do
begin
If s[i] in setc then ss:=ss+(ord(s[i])-48)*trunc(Exp((length(s)-i)*Ln(10)));
end;
strInt:=ss;
end;
var
s:string;
a:array[1..Count] of string;
b:arrtype;
i,n,j:integer;
setc:set of char;
pr:boolean;
begin
setc:=['0'..'9'];
write('Сколько будем вводить чисел:'); readln(n);
For i:=1 to n do
begin
repeat
readln(a[i]); {ввод 10 чисел}
pr:=false;
s:=a[i];
For j:=1 to length(s) do If not(s[j] in setc) then pr:=true;
until not pr;
end;
For i:=1 to n do b[i]:=StrInt(a[i]); {переводим в числа}
Bubble(b,n);
clrscr;
for i:=1 to n do writeln(b[i]);
end.
при_беспорядочном_стуке_по_клавиатуре_всем
_пальчиками ->вылетает
это подходит под определение теста для программы ?
зы : а это программа воспринимает буквы тож нормально?. В прошлой она подставляла где буквы нули =)
а эта если встречает буквы, просит снова ввести!
Нет, не подходит...
Закрыто
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.