Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Секция спортивного ориентирования МИФИ _ Общий _ ПАСКАЛЬ!!

Автор: Cheeees December 18 2005, 17:51

Помогите пожалуйста с информатикой! нужно к четвергу,к зачету сдать проги.Они в принципе не сложные,но их очень много, а я паскаль вообще не знаю,и сама все сделать не могу. Если есть время то напишите пожалуйста эти проги:
1.(104) Даны натуральные числа N и X. Задана случайная целочисленная матрица N*N . Получить последовательность а(1), а(2),....,а(N) из нулей и единиц,где а(i)=1 если все элементы i-й строки =< X, и а(i)=0 если все элементы i-ой строки >X.
2.(74) Написать программу , которая позволяла бы выводить на экран текст и обрабатывать нажатие клавиши Delete,то есть затирать символы в текущем положении курсора. Сделать возможным перемещение курсора стрелками по экрану.
3.(81) Написать программу,которая позволяет определять код любых клавиш,в том числе системных, и вывод их кода на экран.Выход осуществляется с помощью цифры "0".
4.(62)Найти все делители заданного натурального числа . Реализовать функцию для проверки, является ди данное число делителем другого.
5.(66) Дана квадратная матрица N*N , элементами которой являются целые числа. Определить строку матрицы,имеющую наибольшее количество четных элементов. Написать функцию нахождения количества четных элементов в строке.

Автор: Scorpion[MG] December 18 2005, 18:56

я знаю алгоритм, но паскаль я уже забыл (последний раз писал прогу - три года назад)

Автор: Cheeees December 18 2005, 19:04

но если не саму прогу,то хотя бы подскажите как это осуществить,в смысле какие там действия должны быть..

Автор: ~~HellHounD~~ December 18 2005, 20:48

Цитата
1.(104) Даны натуральные числа N и X. Задана случайная целочисленная матрица N*N . Получить последовательность а(1), а(2),....,а(N) из нулей и единиц,где а(i)=1 если все элементы i-й строки =< X, и а(i)=0 если все элементы i-ой строки >X.

Условия задачи поставленны некорректно
Цитата
3.(81) Написать программу,которая позволяет определять код любых клавиш,в том числе системных, и вывод их кода на экран.Выход осуществляется с помощью цифры "0".
Что подразумевается под системными клавишами?
Цитата
4.(62)Найти все делители заданного натурального числа . Реализовать функцию для проверки, является ди данное число делителем другого.
Халява.
Функция для проверки на делимость числа a на число b:
Цитата

function division(a,b:integer):boolean;
begin
if (a mod ) = 0 then division:=true else division:=false;
end;

Цитата
5.(66) Дана квадратная матрица N*N , элементами которой являются целые числа. Определить строку матрицы,имеющую наибольшее количество четных элементов. Написать функцию нахождения количества четных элементов в строке.
Функция для подсчета числа четных элементов:
Цитата

function get_count(m:array of integer;long:integer):integer;
var i,count:integer;
begin
count:=0;
for i:=0 to long-1 do
if(m[i] mod 2 = 0) then inc(count);
get_count:=count;
end;

Автор: ViNiaMin December 18 2005, 22:12

У меня в лекции за II семестр есть вариант решения 2.(74) на Си
Логика вроде правильная, но не проверял

Автор: Cheeees December 19 2005, 17:43

Цитата(~~HellHounD~~ @ December 18 2005, 20:48) [snapback]1059[/snapback]

Условия задачи поставленны некорректно


Учловия полностью списаны с книжки слово в слово,такие какие они там были.Автора книжки не знаю,т.к. списывала задачи на инфе.

Цитата(~~HellHounD~~ @ December 18 2005, 20:48) [snapback]1059[/snapback]
Что подразумевается под системными клавишами?


клавиши F1-F12,Ctrl и кажется Alt.

Автор: ~~HellHounD~~ December 19 2005, 19:08

Цитата
Учловия полностью списаны с книжки слово в слово,такие какие они там были.Автора книжки не знаю,т.к. списывала задачи на инфе.

Цитата
Получить последовательность а(1), а(2),....,а(N) из нулей и единиц,где а(i)=1 если все элементы i-й строки =< X, и а(i)=0 если все элементы i-ой строки >X.

Не учтен случай, когда есть элементы больше и меньше X, что с такими делать?

Автор: Cheeees December 19 2005, 19:24

Цитата(~~HellHounD~~ @ December 19 2005, 19:08) [snapback]1084[/snapback]

Не учтен случай, когда есть элементы больше и меньше X, что с такими делать?

ой да ,извините, не заметила...тогда а=0.

Автор: TheBestMan December 19 2005, 19:42

Блиин. А может еще мне поможете написать процедуру (на паскале) удаления из строки слов менее трех символов (разделенных пробелами, с учетом "," ".". Но можно и без этого). Финальную лабу чудом сдал, а со сторками разбираться не охота.

Автор: Skazitel December 19 2005, 19:50

Первую кинул в Асю.

Цитата(TheBestMan @ December 19 2005, 19:42) [snapback]1091[/snapback]

а со сторками разбираться не охота.


Вот это плохо. Соне 25 прог просто не написать, хотя... + На сколько я знаю, Софья во всём разбирается, так что изволь.

Автор: ViNiaMin December 19 2005, 20:12

А в 2.(74) задаче откуда берётся текст?
Он многострочный?
Как из неё надо сделать выход?

Автор: TheBestMan December 19 2005, 20:59

Тогдаа изъяснюсь по другому, чтобы меня не считали ленивый человеком: завтра последний шанс сдать лабы по лаб. раб. по инф-ки, а тем не менее усиленно не допираю до того как делать программу. Притом очень давно допираю. Хотя очень старался..

Автор: ~~HellHounD~~ December 19 2005, 21:28

Раньше, чем завтра, заняться написанием прог не смогу, так что пишите подробное задание, может что и успею написать.

Автор: ViNiaMin December 19 2005, 22:18

Вот вариант реализации задачи 2(74) для одной строки
http://mephi.web-vnm.by.ru/StrEdit.html

Автор: TheBestMan December 19 2005, 23:43

Вводится строка, из которой удаляются слова (набор символов), меньшие 3трех символов. Программу написать используя два файловых указателя (это без проблем), с помощью процедур (не осилил).

Буду надеяться, т.к. у меня завтра только зачет первой парой а сдача лабы после четвертой и я в инсте буду находиться целый день. Так что буду нервно думать и бегать в электронный читальный зал....

Автор: ~~HellHounD~~ December 24 2005, 19:51

Цитата
1.(104) Даны натуральные числа N и X. Задана случайная целочисленная матрица N*N . Получить последовательность а(1), а(2),....,а(N) из нулей и единиц,где а(i)=1 если все элементы i-й строки =< X, и а(i)=0 если все элементы i-ой строки >X.

Код

uses crt;
var
  m:array[1..100,1..100]of integer;
  var n,x:integer;
function a(n,x,i:integer):integer;
var j,ret:integer;
begin
  ret:=1;
  for j:=1 to n do
    if m[i,j]>x then ret:=0;
  a:=ret;
end;
procedure create_m(n:integer);
var i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      m[i,j]:=random(100);
end;
procedure print_m(n:integer);
var i,j:integer;
begin
  for i:=1 to n do
    begin
      for j:=1 to n do
        begin
          write(m[i,j],',');
        end;
      writeln;
    end;
end;
procedure print_stat(n,x:integer);
var i:integer;
begin
  for i:=1 to n do
    begin
      writeln('a(',i,')=',a(n,x,i));
    end;
end;
begin
  randomize;
  write('Input N (0<N<101):');
  readln(n);;
  write('Input X:');
  readln(x);
  create_m(n);
  print_m(n);
  print_stat(n,x);
  readkey;
end.

Автор: ~~HellHounD~~ December 24 2005, 20:05

Цитата
3.(81) Написать программу,которая позволяет определять код любых клавиш,в том числе системных, и вывод их кода на экран.Выход осуществляется с помощью цифры "0".

Код
uses crt;
var
  k1,k2:char;
begin
  clrscr;
  repeat
    k1:=readkey;
    if k1=#0 then
      begin
        k2:=readkey;
        gotoxy(1,1);
        writeln('   ');
        gotoxy(1,1);
        writeln(ord(k2):3);
      end else
      begin
        gotoxy(1,1);
        writeln('   ');
        gotoxy(1,1);
        writeln(ord(k1):3);
      end;
  until k1='0';
end.

Из системных считает только F1-F10, сильно сомневаюсь, что в Паскале можно отследить нажатие ctrl, alt, F11 и F12 средствами встроенных функций без использования ассемблера.

Автор: ~~HellHounD~~ December 24 2005, 20:47

Цитата
2.(74) Написать программу , которая позволяла бы выводить на экран текст и обрабатывать нажатие клавиши Delete,то есть затирать символы в текущем положении курсора. Сделать возможным перемещение курсора стрелками по экрану.

Код
uses crt;
var
  k1,k2:char;
  x,y:integer;
begin
  clrscr;
  x:=1;
  y:=1;
  gotoxy(x,y);
  repeat
    k1:=readkey;
    if k1=#0 then
      begin
        k2:=readkey;
        case k2 of
        #72:begin
              dec(y);
              if y=0 then y:=24;
              gotoxy(x,y);
            end;
        #75:begin
              dec(x);
              if x=0 then
                begin
                  x:=80;
                  dec(y);
                  if y=0 then y:=24;
                end;
              gotoxy(x,y);
            end;
        #77:begin
              inc(x);
              if x=80 then
                begin
                  x:=1;
                  inc(y);
                  if y=25 then y:=1;
                end;
              gotoxy(x,y);
            end;
        #80:begin
              inc(y);
              if y=25 then y:=1;
              gotoxy(x,y);
            end;
        #83:begin
              write(' ');
              gotoxy(x,y);
            end;
        end;
      end else
      begin
        if (ord(k1)>31)then
          begin
            write(k1);
            inc(x);
            if x>80 then
              begin
                x:=x-80;
                inc(y);
                if y=25 then
                  begin
                    y:=1;
                  end;
              end;
          end;
        case k1 of
          #13:begin
                x:=1;
                inc(y);
                if y=25 then
                  begin
                    y:=1;
                  end;
              end;
          #8:begin
               dec(x);
               if x=0 then
                 begin
                   x:=80;
                   dec(y);
                   if y=0 then y:=24;
                 end;
               gotoxy(x,y);
               write(' ');
             end;
        end;
        gotoxy(x,y);
      end;
  until k1=#27;
end.



Остальное будет после 22:00.

Автор: ~~HellHounD~~ December 24 2005, 22:11

Цитата
4.(62)Найти все делители заданного натурального числа . Реализовать функцию для проверки, является ди данное число делителем другого.

Код
uses crt;
var
  x,i:integer;
function delit(x,d:integer):boolean;
begin
  if x mod d = 0 then delit:=true
  else delit:=false;
end;
begin
  clrscr;
  write('Input X:');
  readln(x);
  writeln('Spisok deliteley:');
  for i:=1 to x do
    begin
      if delit(x,i)then write(i,', ');
    end;
  readkey;
end.


Автор: ~~HellHounD~~ December 24 2005, 22:23

Цитата
5.(66) Дана квадратная матрица N*N , элементами которой являются целые числа. Определить строку матрицы,имеющую наибольшее количество четных элементов. Написать функцию нахождения количества четных элементов в строке.

Код
uses crt;
const n=13;
var
  i,j:integer;
  m:array[1..n,1..n]of integer;
function get_chet(i:integer):integer;
var
  count,j:integer;
begin
  count:=0;
  for j:=1 to n do
    if m[i,j] mod 2 = 0 then inc(count);
  get_chet:=count;
end;
procedure create_m;
var i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      m[i,j]:=random(100);
end;
procedure print_m;
var i,j:integer;
begin
  for i:=1 to n do
    begin
      for j:=1 to n do
        write(m[i,j],', ');
      writeln('chet:',get_chet(i));
    end;
end;
function get_max_chet:integer;
var max_num:integer;
begin
  max_num:=1;
  for i:=2 to n do
    begin
      if get_chet(max_num)<get_chet(i) then max_num:=i;
    end;
  get_max_chet:=max_num;
end;
begin
  clrscr;
  randomize;
  create_m;
  print_m;
  i:=get_max_chet;

  writeln('Maximum chet: max chet line id=',i);
  for j:=1 to n do
    write(m[i,j],', ');
  writeln('chet:',get_chet(i));
  readkey;
end.

Автор: TheBestMan December 25 2005, 03:16

В тему: Через несколько часов зачет по ин-фе.
И тут я понял, что я начинаю ненавидеть свой профилирующий предмет.

Информатика - зло. Паскаль - <CENSORED>

Кофе и ледяной душ - это счастье.


Форум Invision Power Board (http://nulled.ws)
© Invision Power Services (http://nulled.ws)