Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 10:25   #1
ZePr
Пользователь
 
Аватар для ZePr
 
Регистрация: 02.07.2010
Сообщений: 40
По умолчанию 3 олимпиадные задачки

Доброго времени суток. Вот меня озадачили тут.
Если нет возможности дать решение - то дайте хотя бы намёк на него.

1. Матрица

Линейный массив n (n<10) элементов, заполнен целыми числами (|Ai|<100). Составить квадратную матрицу nxn так, что бы её первая строка совпадала с элементами заданного линейного массива, а каждая последующая строка получалась циклическим сдвигом элементов предыдущей строки влево, с переносом первого элемента в конец строки.

Программа должна:
  • Запросить n(n<10) - размер линейной таблицы (целые числа)
  • Запросить по одному элементы линейной таблицы (целые числа)
  • Заполнить требуемым образом квадратную таблицу
  • Вывести её на экран в удобном для просмотра виде.

Вот пока начал:
Код:
program olimp_3;
var
n,i:integer;
q:array [1..10] of integer;
begin
readln(n);
for i:=1 to n do readln(q[i]);
readln;
end.
Вот нашёл на QBasic'e, в принципе всё понятно но не понятно что такое NEXT и как он справляется без DO (Знания бейсика у меня нулевые)

Код:
CLS
 
DO
INPUT "vvedite n "; n
LOOP UNTIL n <= 10
DIM a(n + 1), b(n + 1, n + 1)
FOR i = 1 TO n
INPUT "vvedite element ", a(i)
NEXT
PRINT "ishodnyj massiv"
FOR i = 1 TO n
PRINT a(i);
NEXT
PRINT
FOR i = 1 TO n
FOR j = 1 TO n - i + 1
b(i, j) = a(j - 1 + i)
NEXT
FOR j = n - i + 2 TO n
b(i, j) = a(j - 1 + i - n)
NEXT
NEXT
PRINT "novyj massiv"
FOR i = 1 TO n
FOR j = 1 TO n
PRINT b(i, j);
NEXT
PRINT
NEXT
2. Обработка
Каждый из участников ЕГЭ по информатике и ИКТ получил свой индивидуальный номер от 1 до n(n<1000). Файл input.dat содержит в первой строке количество участников n, а в последующих n строках - результаты участников ( от 0 до 100 баллов) в порядке увеличения их индивидуальных номеров. Необходимо вывести файл output.dat индивидуальные порядковые номера участников ЕГЭ (по одному в строке) в порядке убывания количества набранных ими баллов. Если два участника набрали равное количество баллов, то раньше указывается меньший номер.

Пример:

input.dat output.dat
5 3
40 2
50 4
92 1
50 5
40

Программа должна:
  • Прочитать исходные данные из файла input.dat
  • Найти и записать в выходной файл output.dat номера участников ЕГЭ в порядке убывания набранных баллов (если два участника набрали равное количество баллов, то раньше указывается этот номер)
  • Программа не должна требовать ввода с клавиатуры и/или выводить результат на экран.

3. Сумма
Натуральное число (длинноее целое) можно представить в виде произведения нескольких натуральных чисел (не менее двух) разными способами. Необходимо найти такое представление исходного числа в виде произведения, что бы сумма сомножителей была наименьшей возможной.

Пример:
Исходное число 12, наименьшая возможная сумма 7 (имеется в виду представление 3х4 или 2х2х3)
Программа должна:
  • Запросить исходное число
  • Найти и сообщить наименьшую возможную сумму натуральных сомножителей, произведение которых даёт исходное число.

Последний раз редактировалось ZePr; 13.10.2011 в 11:46.
ZePr вне форума Ответить с цитированием
Старый 13.10.2011, 17:23   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
в принципе всё понятно но не понятно что такое NEXT и как он справляется без DO
в basic все циклы завершатся оператором NEXT (для каждого for должен быть свой next.
Код:
for {do begin хоть и не пишется но всегда подразумевается}
  все что здесь будет в цикле
NEXT {=end для нашего подразумевающегося do begin}
аналогично
Код:
if   (begin}
{end} else {begin} 
end if {=end}
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 13.10.2011 в 17:32.
evg_m вне форума Ответить с цитированием
Старый 13.10.2011, 18:09   #3
_Alerter_
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 89
По умолчанию

Первая задача:
Код:
uses crt;
const N = 10;
var
   i, j, K, offset : integer;
   mas : array [1 .. N] of integer;
   resMas : array[1 .. N, 1 .. N] of integer;

begin
   clrscr;
   readln(K);
   for i := 1 to K do readln(mas[i]);
   offset := 0;
   for i := 1 to K do
   begin
      for j := 1 to K - offset do
      begin
         resMas[i, j] := mas[j + offset];
      end;
      for j := 1 to offset do resMas[i, k - j + 1] := mas[j];
      Inc(offset);
   end;
   for i := 1 to K do
   begin
      for j := 1 to K do Write(resMas[i, j], ' ');
      WriteLn
   end;
   ReadLn
end.
Вторая задача:
Код:
uses crt;
const N = 1000;
var
	f : text;
	mas : array [1 .. N] of integer;
	res : array [1 .. N] of integer;
	i, K, j, t : integer;
	flag : boolean;
begin
	clrscr;
	assign(f, 'input.dat');
	Reset(f);
	ReadLn(f, K);
	for i := 1 to K do
	begin
		ReadLn(f, mas[i]);
		res[i] := i;
	end;
	close(f);
	j := 0;
	repeat
		flag := false;
		for i := 2 to K - j do
		begin
			if mas[i] > mas[i - 1] then
			begin
				flag := true;
				t := mas[i];
				mas[i] := mas[i - 1];
				mas[i - 1] := t;
				t := res[i];
				res[i] := res[i - 1];
				res[i - 1] := t;
			end;
		end;
	until not flag;
	assign(f, 'output.dat');
	Rewrite(f);
	for i := 1 to K do WriteLn(res[i]);
	close(f);
	writeLn('OK');
	Readln
end.
Третья задача:
Код:
uses crt;
const N = 1000;
var
   x, i, j : longint;
   mas : array [1 .. N] of longint;
begin
   clrscr;
   ReadLn(x);
   if x = 1 then
   begin
       write('1');
       Readln;
       exit;
   end;
   i := 2;
   j := 1;
   while x > 1 do
   begin
      if x mod i = 0 then
      begin
          mas[j] := i;
          Inc(j);
          x := x div i;
      end
      else
          Inc(i);
   end;
   if j = 2 then
   begin
      mas[j] := 1;
      Inc(j);
   end;
   for i := 1 to j - 1 do
   write(mas[i], ' ');
   readln
end.

Последний раз редактировалось _Alerter_; 13.10.2011 в 19:24.
_Alerter_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Олимпиадные задачи по программированию _-Re@l-_ Свободное общение 66 09.03.2013 22:41
Олимпиадные задачи в паскале scoprion Помощь студентам 2 28.11.2010 17:23
срочно требуется! стандартные олимпиадные задачи по графам RebelderGirl Паскаль, Turbo Pascal, PascalABC.NET 1 24.04.2008 13:23
Помогите решите олимпиадные задачи, пожалуйста!!! student523 Помощь студентам 1 17.12.2007 17:01