IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
Closed Topic Открыть новую тему 
> массив из строк, и формирование вектора
>hamka<
сообщение 23.02.2005 21:12
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Когда есть массив из строк, то при добавлении нового элемента, он подсоединяется к предыдущей строке. А как же их разграничить.
Код

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);
....

если они разграничиваются ( ведь массив же ), то где же моя ошибка ? =((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 23.02.2005 21:17
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


бред какой-то..
можете задание сказать для того, что бы было понятно о чем речь вообще.. мне потому что не понятна ваша затея...


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 23.02.2005 21:37
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


от пользователя получают 10 цифр ( их тип string ), далее из переводят в число (без val'а) по алгоритму : к последней цифре прибавляется предпоследняя*10 + предпредпоследняя*100 и т.д. , в итоге получается число smile.gif
далее идет заполнение массива числами ( которые сначала, являются строками) потом по этому же алгоритму идет их перевод в число. Далее я хочу эти числа занести уже в массив цифровой , а далее их сортировка методом "пузырька".
Но в проге у меня получается, что когда я заношу в строковый массив строку, она у меня переводится в число, но потом при занесении следущеей строки, число прибавляется к предыдущему ( хотя по идее не должно ). И как итог вместо массива из строк ( а потом и из чисел ) получается одна большая строка ( или число ).
Надеюсь я объяснила понятно smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 23.02.2005 21:54
Сообщение #4


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Смотри-ка сюда...
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 чисел..
на основе того ,что я дал, ты можешь все сделать дальше..
еще вопросы есть?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 23.02.2005 22:02
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Цитата(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)));


еще вопросы есть?

Спасибики!
Тока один еще вопрос: а после транк'а что за выражение такое, т.е. что оно делает по алгоритму перевода строки в число?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 23.02.2005 22:04
Сообщение #6


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


возведение в степень. Есть такая формула.
В данном случае возвожу 10 в степень соответствующую..


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 24.02.2005 14:47
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Перенесено из темы "Формирование вектора"

этот алгорит проверки на "не число" не в цикле у меня работает. А потом у меня должно происходить формирование вектора. И здесь такая ситуация-> с первым числом все нормально, а потом происходит выход из цикла. Идет переход на формирование вектора.
Код

...
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лед. число> и т.д.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.02.2005 15:39
Сообщение #8


Гость






Цитата(>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;
{ далее по тексту }


Теперь пользователь просто не сможет ввести те символы, которые он вводить не должен...
 К началу страницы 
+ Ответить 
>hamka<
сообщение 24.02.2005 16:06
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Так же это практически всю программу придется переписывать. А у меня уже все практически готово =(( Даж проверку на max значение сделала, когда можно вводить какие угодно символы. И все работает +) Тока когда в цикл подставляю, идет обработка тока первого элемента и все. Может можно как-нибудь сделать, чтобы не переписывать smile.gif

Сообщение отредактировано: >hamka< - 24.02.2005 16:07
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 24.02.2005 16:51
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


И еще такой вопросик. В программе я хочу проверить нажатую клавишу на <Enter>
Что я должна написать ?
Код
if n=……? then writeln.

как символ это не представить. А как символ из аски < Enter> как называется? Еще я прочитала про какие-то коды опроса клавиатуры =)).
Что это такое ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.02.2005 16:56
Сообщение #11


Гость






Цитата(>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)
как символ это не представить
blink.gif
 К началу страницы 
+ Ответить 
>hamka<
сообщение 25.02.2005 20:22
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Объединено из темы: "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> как на некорректное значение? Ведь раньше все работало, а по мере увеличения проги работать перестало! Теперь просто переход на новую строчку и вылет из программы. Что делать?

Продолжайте обсуждение своей задачи в одном топике
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 25.02.2005 20:26
Сообщение #13


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


"жуть. " (С)

1. убрать метки.
2. показать весь код.

3. тогда поговорим.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 25.02.2005 20:34
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Вот программа, которая не работает. не знаю почему =)) не вижу я своих ошибок.
она простая. многие в моей группе ее за 2 часа написали. причем у них программа работала даже с ошибками в коде, которые видели все. а у меня...
я плачу =((


а вот собственно и задание.
Получение от пользователя до 10 ( и 10) целых чисел. Сортировка , вывод на экран.
все элементы-целые простые числа. Цель -> максимальная защита "от дурака", т.е. хоть ногами по клавиатуре прыгай, но программа должна быть полностью рабочей ( без каких-либо вылетов)


Прикрепленные файлы
Прикрепленный файл  LABA_1.PAS ( 3.78 килобайт ) Кол-во скачиваний: 203
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.02.2005 20:38
Сообщение #15


Гость






Нет уж, увольте ... Разбираться в такой программе просто несерьезно... Сплошные GOTO... Избавитесь от них, тогда пожалуйста. А так - :no:
 К началу страницы 
+ Ответить 
Altair
сообщение 25.02.2005 21:27
Сообщение #16


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


вот программа. работает по заданию. Тестил в 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.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 25.02.2005 22:06
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


Вот моя модифицированная программа, но она кажеЦа не работает вообще =))
Такая глючная. Ужас!
если набрать число, то вводится тока одно. При наборе букв, вообще вылетает. Недочетов масса. Мож как нибудь можно свою передедать? Там ведь только на <Enter> не реагирует. + цикл не проходит . ( LABA_1)


Прикрепленные файлы
Прикрепленный файл  L_1.PAS ( 1.67 килобайт ) Кол-во скачиваний: 183
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 25.02.2005 22:10
Сообщение #18


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


а чем не устраивает тот вариант что я предложил?
может там просто что-то не понятно тебе?


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
>hamka<
сообщение 25.02.2005 23:00
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Женский

Репутация: -  0  +


ну, во-первых, все-таки вылетает.
потом у меня программа диалоговая, т.е. если не цифры - сообщение и повторный ввод. А в этой все воспринимается. И самое главное "вылетает"

Плиз, помогите кто-нить передалать мою, чтобы не было гоуту, и чтобы работало smile.gif
Мне надо сдавать уже в четверг. Это вопрос гордости Ж)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 25.02.2005 23:08
Сообщение #20


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


1. она не вылетает.
2. а исправить программу для повторного ввода слабо???


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:30
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"