Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 29.10.2011, 17:26   #1 (permalink)
zaaag
Новичок
 
Регистрация: 29.10.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите, пожалуйста, с задачей на массивы

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

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

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[i]);
end;
zaaag вне форума   Ответить с цитированием

Старый 29.10.2011, 17:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если поискать по форуму, то можно найти много похожего, рекомендую к прочтению

Помогите пожалуйста с задачей по C++
Помогите с задачей на С++ очень срочно нужно...пожалуйста
Помогите, пожалуйста, с Паскалем. Процедуры-массивы

Старый 29.10.2011, 17:43   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от zaaag Посмотреть сообщение
Вот начал а дальше не знаю как((
Да, начало, конечно, мощное. Ну ладно, держите продолжение с окончанием:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.11.2011, 23:01   #3 (permalink)
zaaag
Новичок
 
Регистрация: 29.10.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо большое!) а можете проверить ещё одну задачу, правильно ли?

Вычислить среднее арифметическое введенных чисел, количество введенных чисел и количество введенных нулей. При вводе числа 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.
zaaag вне форума   Ответить с цитированием
Старый 03.11.2011, 10:33   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от zaaag Посмотреть сообщение
а можете проверить ещё одну задачу, правильно ли?
В целом - да, всё правильно. Но есть несколько, скажем так, небольших шероховатостей непринципиального характера.
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.
Но, повторяю, все эти поправки - в основном "косметического" характера. Принципиально же программа составлена правильно.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.11.2011, 19:38   #5 (permalink)
zaaag
Новичок
 
Регистрация: 29.10.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

помогите пожалуйста вот с этой задачей((

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 10.11.2011, 23:43   #6 (permalink)
zaaag
Новичок
 
Регистрация: 29.10.2011
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

правильно??

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[i]:=a[i]+s[j]
end;
Writeln('Вводить еще информацию? ');
readln(c);
end;
for j:=1 to i do
if a[j]<>'' then Writeln(a[j]);
readln
end.
zaaag вне форума   Ответить с цитированием
Старый 11.11.2011, 10:43   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от zaaag Посмотреть сообщение
правильно??
Не совсем.
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 18:56.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.