• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите, пожалуйста, с задачей на массивы

  • Автор темы Автор темы zaaag
  • Дата начала Дата начала

zaaag

Ученик
Регистрация
29 Окт 2011
Сообщения
4
Реакции
0
Баллы
0
Помогите, пожалуйста, с задачей на массивы

Сдвинуть элементы массива по кругу на два элемента против часовой стрелки. ()

Вот начал а дальше не знаю как((

program vlevo;
var i,n,s: integer;
a:array[1..100] of integer;
begin
write('n=');
read(n);
for i:=1 to n do
begin
write('a[',i,']=');
readln(a);
end;
 
Вот начал а дальше не знаю как((
Да, начало, конечно, мощное. Ну ладно, держите продолжение с окончанием:
Код:
Uses CRT;
var
 i,n,s,b1,b2: integer;
 a:array[1..100] of integer;
begin
 clrscr;
 write('n= ');
 readln(n);
 for i:=1 to n do
 begin
  write('a[',i,']= ');
  readln(a[i]);
 end;
 clrscr;
 writeln('Initial array:');
 for i:=1 to n do write(a[i]:4);
 writeln;
 b1:=a[1];
 b2:=a[2];
 for i:=3 to n do a[i-2]:=a[i];
 a[n-1]:=b1;
 a[n]:=b2;
 writeln('Shifted array:');
 for i:=1 to n do write(a[i]:4);
 readln
end.
 
спасибо большое!) а можете проверить ещё одну задачу, правильно ли?

Вычислить среднее арифметическое введенных чисел, количество введенных чисел и количество введенных нулей. При вводе числа 777 закончить работу.

program qw;
var
tmp, zero, total, sum: integer;
sred: real;
begin
zero := 0;
total := 0;
sum := 0;
repeat
read(tmp);
if tmp <> 777 then
begin
inc(total);
sum := sum + tmp;
if tmp = 0 then
inc(zero);
end;
until tmp = 777;
sred := sum / total;
write('Всего чисел: ', total, ' Из них нулей - ', zero, ' Среднее арифметическое = ', sred);
end.
 
а можете проверить ещё одну задачу, правильно ли?
В целом - да, всё правильно. Но есть несколько, скажем так, небольших шероховатостей непринципиального характера.
1. Для переменной sum лучше выбрать формат LongInt - мало ли, какие числа вводятся и сколько, может получиться так, что сумма выскочит за границы формата Integer (32000 с копейками).
2. Ввод чисел желательно оформить с экранной подсказкой - пустой экран с моргающим маркером плохо смотрится.
3. Есть некая тонкость с оператором ввода. Лучше использовать не read, а readln. Не буду вдаваться в подробности, но read - "плохой" оператор, он как бы не закрывает ввод, а оставляет систему в ожидании следующего ввода, что приводит, в частности, к несрабатыванию остановок, см. п.4.
4. В конце программы желательно поставить команду readln без параметров. Дойдя до нее, программа остановится и покажет выведенный на экран результат расчета. Но это произойдет только, если в программе для ввода используются операторы readln, а не read.
5. Для среднего лучше (просто красивее) использовать форматный вывод. Например, формат 0:3 означает, что число будет выведено с тремя знаками после десятичной точки.
С учетом поправок:
Код:
program qw;
var
 tmp, zero, total: integer;
 sred: real;
 sum:longint;
begin
 zero:=0;
 total:=0;
 sum:=0;
 repeat
  write('Введите число: ');
  readln(tmp);
  if tmp<>777 then
   begin
    inc(total);
    sum:=sum+tmp;
    if tmp=0 then inc(zero);
   end;
 until tmp=777;
 sred:=sum/total;
 writeln('Всего чисел: ', total, ' Из них нулей - ', zero, ' Среднее арифметическое = ', sred:0:3);
 readln
end.
Но, повторяю, все эти поправки - в основном "косметического" характера. Принципиально же программа составлена правильно.
 
помогите пожалуйста вот с этой задачей((

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

правильно??

Program z1; uses crt;
const glas = ['а','е','и','о','у','э','ю','я','А','Е','И','О','У','Э','Ю','Я'];
var s:string;
i,j:integer;
c:char;
a:array[1..100] of string;
begin
clrscr;
i:=0;
Writeln('Будете вводить данные');
readln(c);
While ( c in ['Y','y','Д','д']) or (i=100) do
begin
inc(i);
Writeln('Введите ',i,' ю строку');
readln(s);
for j:=1 to length(s) do
begin
if not(s[j] in glas) then a:=a+s[j]
end;
Writeln('Вводить еще информацию? ');
readln(c);
end;
for j:=1 to i do
if a[j]<>'' then Writeln(a[j]);
readln
end.
 
Не совсем.
1. В перечне множества Glas Вы поставили пробел после буквы "У" - абсолютно недопустимо и приводит к ошибке!
2. Неверно сформулированы условия цикла While...do.
3. В предпоследней строке условный оператор if a[j]<>'' then - лишний.
Вот подредактированный вариант:

Код:
uses crt;
const
 glas=['а','е','и','о','у','э','ю','я','А','Е','И','О','У','Э','Ю','Я'];
var
 s:string;
 i,j:integer;
 c:char;
 a:array[1..100] of string;
begin
 clrscr;
 i:=0;
 Writeln('Будете вводить данные (Y/N), (Д/Н)?');
 readln(c);
 While (c in ['Y','y','Д','д']) and (i<=100) do
  begin
   inc(i);
   Writeln('Введите ',i,'-ю строку');
   readln(s);
   for j:=1 to length(s) do
    if not(s[j] in glas) then a[i]:=a[i]+s[j];
   Writeln('Вводить еще информацию (Y/N), (Д/Н)?');
   readln(c);
  end;
 Writeln;
 for j:=1 to i do Writeln(a[j]);
 readln
end.
 
Назад
Сверху