Помощь - Поиск - Пользователи - Календарь
Полная версия: Ход конем - "приветливость" програм
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alex7
Как можно сделать так, чтобы не спрашивать у пользователя сколько тот в дальнейшем собирается ввести чисел(записываемые в масив), а сделать хд конем, притом вычислив их кол-во. Учитывая то, что он может разделить их (числа) любыми знаками препинания(кроме точки, разумеется); и чтобы "числа"! содержищие неправильные знаки(к пр. символы алфавита) не записывались, а после выводилось сообщение, что молвв в таком-то числе была ошибка при написании.?
unsure.gif
Вот как я пытался это организовать. Но, конечно же мне явно не хватает знаний norespect.gif
Repeat
Writeln('‚ўҐ¤лвм ўҐЄв®а ¤л©б­Ёе зЁбҐ«');
Readln(vector);
If Length(vector)>5 then
begin
l:=0;
For i:=1 to Length(vector)-4 do
begin
Val(Copy(vector,1,Pos(' ',vector)-1),arr[i],z);
Delete(vector,1,Pos(' ',vector));
Inc(l);
end;

И кстати:, Пожалуйсто!:
http://forum.pascal.net.ru/index.php?showtopic=7406
http://forum.pascal.net.ru/index.php?showt...&st=0&p=53351&#

И:
тут задачка, вроде решил, но не понимаю тогда почему такое странное задание:
Цитата
Определить, сколько ф-я() пересекает ось ОХ(т.е. знаки в 2-х соседних точках разные)на промежутке х1,х2 . Разсмотреть 125 рабноотдаленных точек на промежутке
А вот и задача:
Program Peretin_OX;
Uses CRT;
var x,dx,t1,t2:double;
x1,x2,number:longint;
Begin
clrscr;
textcolor(7);
Repeat
Writeln('‚ўҐ¤iвм x1,x2');
Readln(x1,x2);
If x1>=x2 then
writeln('ЌҐўiа­Ё© ¤i Ї §®­!');
Until x1<x2;
dx:=(x2-x1)/125;
number:=0;
x:=x1;
repeat
t1:=((ln(x*x))/ln(3))+cos(pi/3+2*x*x*x);
x:=x+dx;
t2:=((ln(x*x))/ln(3))+cos(pi/3+2*x*x*x);
if (t1*t2)<0 then number:=number+1;
until x>=x2;
textcolor(2);
writeln('Љi«мЄiбвм ЇҐаҐвЁ­iў § OX: ',number);
readln
End.

Просто она действительно, считает кол-во пересечений,, но только в двух соседних точках, и так 125 раз, а не в общем, а значит при меньшем диапазоне может быть больше пересечений, Вобщем правильно ли я понял задание???
volvo
Alex7
вот тебе ввод программиста:
Цитата(Input)
120 -4a3, 73 -12 ??33

какие результаты ты хочешь получить? В порядке возникновения ошибок, перечисли...

И, вдогонку, еще вопрос: а куда, собственно, записывать получаемые данные? Организовать массив из 1000 элементов заранее? Это не есть хороший стиль...
Alex7
Я тебя не понял.
Ты говоришь про последнюю задачу?
Просто я спрашиваю, правильно ли я организовад прогу для исполнения этого:
Код
Определить, сколько ф-я() пересекает ось ОХ(т.е. знаки в 2-х соседних точках разные)на промежутке х1,х2 . [U] Разсмотреть 125 рабноотдаленных точек на промежутке[/U]
задания!?
Результаты просто вывести на экран, как и в проге.
================
А как на счет
Цитата
Как можно сделать так, чтобы не спрашивать у пользователя сколько тот в дальнейшем собирается ввести чисел(записываемые в масив), а сделать хд конем, притом вычислив их кол-во. Учитывая то, что он может разделить их (числа) любыми знаками препинания(кроме точки, разумеется); и чтобы "числа"! содержищие неправильные знаки(к пр. символы алфавита) не записывались, а после выводилось сообщение, что молвв в таком-то числе была ошибка при написании.?
volvo
Я тебя про первую спрашиваю !!!
Вторая меня не интересует. Одна тема - один вопрос.
Alex7
Цитата
Одна тема - один вопрос.

Ясно, но я эт типо для экономии.
Мне нужно просто переделать условие типа
 Repeat
Writeln('Введите кол-во чисел, которые после введете');
Readln(n);
If n<3 then
writeln('Надо не меньше 3-х!');
Until (n>=3) and (n<200);
Writeln('Введите',n,'чисел');
i:=1;
repeat
read(arr[i]);
Inc(i);
until (i>n);
readln;

На такое, типо чтобы не запрашивало кол-во чисел которые ты введешь.
Для удобства.
Слушай, мне щас уже так приперло эта задача, что ОЧЕНЬ прошу!
http://forum.pascal.net.ru/index.php?showt...&st=0&p=53403&#
volvo
Alex7, я вторым постом задал вопрос, пока ты на него не ответишь, я ничего больше писАть сюда не буду...
Alex7
Цитата
120 -4a3, 73 -12 ??33

Из этих условий:
ошибка в 7-м везде кроме там тока знаки разделения и ...."+","-"
так что числа в масиве:
Цитата
120,73,-12,33


ЗЫ: я тя тогда не понял)
Alex7
volvo, я ж те ответил!
Очень надеялся на твой ответ! dry.gif
volvo
Alex7, я что просил?

Цитата
какие результаты ты хочешь получить? В порядке возникновения ошибок, перечисли...

Ты мне ответил? Тогда покажи, где перечисленно пошагово что должно произойти!!!
Alex7
Цитата
какие результаты ты хочешь получить? В порядке возникновения ошибок, перечисли...

Вот те результаты! Это числа, записаные в масив действительных чисел.
Цитата
120,73,-12,33

А вот ошибки :
Цитата
ошибка в 7-м

т.к. символы алфавита не являются разделителями, или знаковыми!
И чем те не ответ?
Чего ты еще хочешь, чтобы я саказал? wacko.gif blink.gif
volvo
Тогда вот так...

Вот сама функция:
function read_buffer(s: string;
var arr: array of double): integer;

const
max_word = 255;
delimiter = [#32, ',', '?', '!', ':'];

type
wrd_info = record
start, len: byte;
end;
var
words: array[1 .. max_word] of wrd_info;

function get_words(s: string): byte;
var
count: byte;
i, curr_len: byte;

begin
count := 0; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;
get_words := count;
end;

var
cnt: byte;
i, ix, err: integer;
f: double;

begin
cnt := get_words(s); ix := -1;
for i := 1 to cnt do begin
val(copy(s, words[i].start, words[i].len), f, err);
if err <> 0 then begin
writeln('error in char #', words[i].start + err - 1)
end
else begin
inc(ix);
arr[ix] := f;
end;
end;
read_buffer := succ(ix);
end;


вот пример вызова:
const
max_size = 20;
var
s: string;
arr: array[1 .. max_size] of real;
i, count: integer;

begin
s := '120 -4a3, 73 -12 ??33';
count := read_buffer(s, arr);

for i := 1 to count do
writeln('#', i:2, ' = ', arr[i]:10:5);
readln;
end.


Ты это имел в виду?
Alex7
Да, это я и имел ввиду.
Но тут есть одно но:
Как думаетее, если я такую ф-ю влеплю рядом с прогой, длинной приблизительно как в примере, то как на меня посмотрять преподы- вопервых- пацан мозгами поехал, вовторых - захотел повымахиваться!
Но, как говорится, чего хотел, то и имеешь, вот только думал я что это можно организовать намного проще nea.gif
Кстати, (s[i] in delimiter) это так всегда можно писать, когда огласил перечисляемый тип константы в Const ?
А то я думал. что in работает только для множеств.
volvo
Просто так ничего не бывает ... Тебе нужна была универсальность - ты ее получил (за счет размера программы). Или тебе нужен размер программы, тогда делай как делал раньше...

Цитата
Кстати, (s[i] in delimiter) это так всегда можно писать, когда огласил перечисляемый тип константы в Const? А то я думал. что in работает только для множеств.
А delimiter по твоему это что?
GoodWind
Цитата
Кстати, (s[i] in delimiter) это так всегда можно писать, когда огласил перечисляемый тип константы в Const ?
А то я думал. что in работает только для множеств.

а delimeter разве не множество ? wink.gif
Alex7
Из объяснений преподователей я понимал, что множества можно задавать ТОЛЬКО так:
<имя> : set of <тип>
значит можно и в консте. ясно.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.