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

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

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

3 страниц V < 1 2 3 >  
 Ответить  Открыть новую тему 
> Задача с массивом..., Определить эл-ты делящиеся на 4...
сообщение
Сообщение #21


Новичок
*

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

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


Ну, во-первых там надо было убрать строку write(b[i]:5);
А чем тебя не устраивает в столбик?
можно, конечно, поставить read(b[i]) и вводить числа через пробел, но нас учили, что иногда может неккорктно читаться информация...
А вообще, в таких случаях для красоты я делаю так: :D
Код

BEGIN
clrscr;
Randomize;
For i:=1 to n do
readln(b[i]);
clrscr;
For i:=1 to n do
write(b[i]:5);
writeln;

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


--------------------
Что нам стоит мир пострить? Нарисуем - будем жить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Новичок
*

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

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


Большое спасибо, но у меня появилась ещё пара вопросов.

Напишите пожалуйста описание идентификаторов.

Как сделать так, чтобы если введут число не из данного диапозона или введут букву, то появлялось бы надпись, которая сообщала что это не правильно и надо так-то...?

Сообщение отредактировано: ghost -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Новичок
*

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

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


Цитата(ghost @ 24.11.04 17:27)
В массиве B(20) определить элементы, делящиеся на 4 без остатка, и сформировать из них новый массив C, подсчитав количество таких
элементов и минимальный и максимальный среди них.

Как сделать так, чтобы если введут число не из данного диапозона или введут букву, то появлялось бы надпись, которая сообщала что это не правильно и надо так-то...?

Описание идентификаторов я уже писала:
Код

Uses crt;
const n=20;
Var b,c:array [1..n] of integer;
  min,max,i,j,k:integer;


Если будет введена буква, программа автоматически прервется, потому что будет несоответствие типов.
В вашей задаче не указаны ограничения для ввода чисел. но обчыно я делаю это так:
Код

Uses crt;
const n=20;
Var b,c:array [1..n] of integer;
  min,max,i,j,k:integer;
Label a;

i:=0;
Repeat
 inc(i);
 a:readln(b[i]);
 If {условие, накладываемое на b[i], не выполняется} then
            begin
            writeln('TRY once more!');
            goto a;
            end;
Until i>=20;


--------------------
Что нам стоит мир пострить? Нарисуем - будем жить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Лита
А если без Goto?
var ToDo: Boolean;
...
Repeat
 inc(i);

 repeat
   ToDo := False;
   readln(b[i]);
   If {условие, накладываемое на b[i], не выполняется} then
     begin
       writeln('TRY once more!'); ToDo := True
     end;
 until ToDo;

Until i>=20;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Новичок
*

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

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


Цитата(volvo @ 24.11.04 18:16)
А если без Goto?

Можно и без GoTo... ;)


--------------------
Что нам стоит мир пострить? Нарисуем - будем жить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Новичок
*

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

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


Под описанием я имел в виду, для чего он(идентификатор), какую роль играет в проге. Например, зачем нужны min, max, i, j?

В идентификаторах появилась буква k, опечатка?

"Условие, накладываемое на b[i], не выполняется" А что за условие?

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

Сообщение отредактировано: ghost -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






ghost
Во первых, в переменную типа Integer нельзя занести значение не попадающие в интервал от -32768 до 32767... Поэтому я делаю по другому:


Var
 {Вводим данные в тип LongInt, как более емкий по сравнению с Integer}
 next: LongInt;
...
i := 0;
Repeat
inc(i);

repeat

  (* Отключаем реакцию на ошибки ввода-вывода, читаем значение, и включаем
контроль снова (при выключенном контроле ввод буквы вместо числа приведет
к тому, что в переменную IOResult запишется код ошибки, но аварийного останова
не произойдет) *)

  {$I-} readln(next); {$I+}
  ToDo := False
  If (next < -32768) or (next > 32767) Then
    Writeln('Number not in range -32768 .. 32767. Try once more!')
  Else If IOResult <> 0 Then
           Writeln('Wrong format was entered. Try once more!')
         Else
           Begin
             b[i] := next;
{ Только здесь можно быть уверенным, что не было ошибки
при вводе данных и число находится в требуемом диапазоне.
Тогда присваиваем очередной элемент массива введенному
числу и переходим к след. элементу.}

             ToDo := True;
           End;
until ToDo;

Until i>=20;



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Новичок
*

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

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


Ничего не могу понять, куда чего blink.gif
Не мог бы кто-нибудь сделать исправленную (чтобы выводилось сообщение, о том что так нельзя, если будет введена цифра не из диапозона или будет введена буква, другими словами мне нужна "защита от дурака") прогу на основе вот этой:

Uses crt;
const n=20;
Var        b,c:array [1..n] of integer;
  min,max,i,j:integer;
  next: LongInt;
  Again, ToDo: Boolean;
begin
  clrscr;
    gotoxy  (12,10);
   writeln ('Данная программа задаёт массив А, выбирает из него числа');
    gotoxy  (15,11);
   writeln ('кратные 4 и создаёт из этих чисел новый массив С. ');
    gotoxy  (19,12);
   writeln ('Элементами вашего массива должны быть');
    gotoxy  (20,13);
   writeln ('целые числа от -32768 до 32767.');
    gotoxy  (12,15);
   writeln (текст');
    gotoxy  (27,16);
   writeln ('текст');
    gotoxy  (18,17);
   writeln ('Нажмите любую клавишу для продолжения');
    readkey;

Again := True;
While Again Do
Begin
 clrscr;
   writeln ('Вводите числа в диапозоне от -32768 до 32767');
   writeln ('Массив А');

 Begin
 For i:=1 to n do
   Repeat
     {$I-} readln(next); {$I+}
     ToDo := False;
     If (next < -32768) or (next > 32767) Then
       Writeln('Number not in range -32768 .. 32767. Try again!')
     Else If IOResult <> 0 Then
              Writeln('Wrong format was entered. Try again!')
            Else
              Begin
                b[i] := next; ToDo := True
              End;
   Until ToDo;

 clrscr;
   writeln ('Массив А');
 For i:=1 to n do
   write(b[i]:5);
   writeln;
 End;

    gotoxy (1,5);
   writeln ('Массив C');
     j:=0;
 For i:=1 to n do
begin
 If b[i] mod 4=0 then
begin
 inc(j);
  c[j]:=b[i];
   If j=1 then
       begin
       max:=c[j];
       min:=c[j];
       end
       else
       begin
       If c[j]<min then min:=c[j];
       If c[j]>max then max:=c[j];
       end;
end;
end;
writeln;
If j>0 then
begin
For i:=1 to j do
  write(c[i]:4);
  writeln;
  writeln('Всего элементов ',j);
  writeln('max=',max,' min=',min);
end
else
  writeln('Нет элементов кратных 4');

   writeln('Вы хотите сделать ещё один массив? y/n');
   case UpCase(readkey) of
   #89:;
   #78: Again := False;
   end;
End; { While Again }
end.

Я исправил программу. Должна работать.

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #29


Гость






ghost
Смотри пост выше...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #30


Новичок
*

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

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


Не работает "защита от дурака" sad.gif
При вводе, например, числа 4 - пишет, что число не в диапозоне (Number not in range -32768 .. 32767. Try once more!), хотя оно в диапозоне.
А при вводе буквы, прога автоматически останавливается как и раньше.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


Цитата
If (next > -32768) and (next < 32767) Then

по моему так:
if not ((next > -32768) and (next < 32767)) then


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #32


Гость






GoodWind
Прав 100%. Я просто не исправил. Сейчас порядок...
ghost
Смотри программу выше
 К началу страницы 
+ Ответить 
сообщение
Сообщение #33


Новичок
*

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

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


Спасибо, помогло rolleyes.gif
Но теперь в массив А вводится больше 20 элементов, а должно быть ровно 20.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Гость






Не вводится больше 20... вводится ровно 20, исключая ошибочные (я проверял)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #35


Новичок
*

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

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


В том сообщении, где вы исправляли программу, на основе моей, вводится больше 20 эл-ов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #36


Гость






ghost
Ничего подобного - я еще раз перепроверил прямо с того сообщения - вводится ровно 20 элементов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #37


Новичок
*

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

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


Хихи, странно, перед тем как написать предыдущее своё сообщение, я проверял, и 20 не получалась, щас получается.=)
Моя ошибка, извини=)
Всем огромное спасибо!

Сообщение отредактировано: ghost -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #38


Новичок
*

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

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


Помогите пожалуйста
Совсем забыл про блок схему. В ней появится какие-нибудь изменения после всех этих переделок? Если да, то какие?

И ещё идентификаторы:
min, max, i, j, next, again, todo опишите их роль плиз, для чего служат?

Добавлено (13.12.04 12:30):
А как сделать так чтобы, в проге можно было бы обработать кол-во элементов от 2 до 100, а не только 20?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #39


Гость






ghost
А для чего в программе пишется:
const n=20;

для красоты? По-моему, не только. Меняем на пюбое другое - и программа работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #40


Новичок
*

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

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


volvo
ага, вот только еще удостоверится, что массив описан так, что позволяет менять константу на любое другое :D


--------------------
Что нам стоит мир пострить? Нарисуем - будем жить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 11.01.2025 15:28
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name