Помощь - Поиск - Пользователи - Календарь
Полная версия: Ещё одна задача... но на двухмерный массив (матрицу)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Димас
Здача 1077 б


Дан двухмерный массив. Превратить:
б.) первый столбец на место последнего, при этом вторую,тертью... последний столбцы сместить влево.


Лично я ничего не понял из написаного выше... обясните пожалуйста логику задачи:-)

эх..... как всё у меня запущено и трудно blink.gif
klem4
1 2 3
4 5 6
7 8 9

-->

2 3 1
5 6 4
8 9 7
Димас
ага во , как получается smile.gif

а как это делается(решается) в матиматике? blink.gif
klem4
  for i := 1 to n do
   for j := 1 to m - 1 do begin
     T := x[i, j];
     x[i, j] := x[i, j + 1];
     x[i, j + 1] := T;
   end;

Димас
А можно чуть поподробней обяснить это:

 for i := 1 to n do
   for j := 1 to m - 1 do begin
     T := x[i, j];
     x[i, j] := x[i, j + 1];
     x[i, j + 1] := T;
   end;


Пожалуйстаsmile.gif

?
Димас
ну ладно....
есть ещё одна задачка на двухмерный массив

Задача1066б


Дано двухмерный массив. Удалить из него: б.) S-й столбец

Всё в задаче больше ничего не сказаноsad.gif

что это за S-й столбец ?

например?

blink.gif
Айра
Цитата
что это за S-й столбец ?

По-моему, пользователь должен ввести номер столбца (S), который нужно удалить.
1 2
4 5
7 8
s=1 =>
2
5
8
Димас
Посидел я до 00:00 ночи, и вот что решил всё таки blink.gif задачу1077б
воть:

Program bla_bla;

uses crt;

const
     mass: Array [1..3,1..3] of integer = ((11, 12, 13),(21, 22, 23),(31, 32, 33));

var
   klon_p,i:integer;
begin
ClrScr;
 textcolor(2);
 writeln('исходный масив');
 {------------------------------}
 for i:=1 to 3 do
 begin
  writeln(mass[i,1],' ', mass[i,2],' ', mass[i,3]);

 end;
 {------------------------------}
 for i:=1 to 3 do
 begin
      klon_p:=mass[i,1];
      mass[i,1]:=mass[i,2];
      mass[i,2]:=mass[i,3];
      mass[i,3]:=klon_p;
 end;
 {------------------------------}
 textcolor(4);
 writeln;
 writeln('результат обработки');
 {------------------------------}
 for i:=1 to 3 do
 begin
      writeln(mass[i,1],' ', mass[i,2],' ', mass[i,3]);

 end;
 {------------------------------}
 readln;
end.



а терь мона и спатки cool.gif

smile.gif
Димас
Цитата(Димас @ 27.12.2006 21:59) *

ну ладно....
есть ещё одна задачка на двухмерный массив

Задача1066б


Дано двухмерный массив. Удалить из него: б.) S-й столбец

Всё в задаче больше ничего не сказаноsad.gif

blink.gif


как бы это всё на паскалике накатать.... wacko.gif
Цитата(Айра @ 27.12.2006 22:48) *

По-моему, пользователь должен ввести номер столбца (S), который нужно удалить.
1 2
4 5
7 8
s=1 =>
2
5
8

А как такое можно сделать(удалить один столбец) с масивом???? blink.gif

мож есть функция?

(я могу тока нулями заменить, а вот удалить проблема nea.gif )

ПоЖуЛуйСтА помогитессс smile.gif

hiv
Цитата(Димас @ 28.12.2006 13:14) *
А как такое можно сделать(удалить один столбец) с масивом???? blink.gif
Никак. Есть два варианта:
1) Статически определяешь такую запись:

const Max_Razm:=20;
type
record
  N :integer; {кол-во строк}
  M :integer; {кол-во столбцов}
  Matr :array[1..Max_Razm,1..Max_Razm] of Integer; {значения матрицы}
end;


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


хотелось бы с записям поработать....

но я с ними никада не работал.... и не знаком.... как бы с ними познакомиться?

Общем что "такое записи и с чем их едят"? blink.gif

smile.gif
klem4
Правила форму читать не пробовал ?

FAQ для кого создается ? А поиск ? Тоже для красоты ?

F_A_Q: Записи. Record.
Димас
Цитата(klem4 @ 28.12.2006 15:22) *

Правила форму читать не пробовал ?

FAQ для кого создается ? А поиск ? Тоже для красоты ?

F_A_Q: Записи. Record.


Пардон rolleyes.gif

просто с такой скоростю как у меня через GPRS тока и бегать по факам и тратить дорогой и глючный трафик плохого опсоса....

 ! 
А дороговизна и глючность - это НАШИ проблемы? А может, все-таки, ТВОИ? Ты пришел на форум, будь добр следовать его Правилам ... Не можешь - google.com и ищи форум, где правила НЕ выполняются...
volvo

Димас
Цитата(hiv @ 28.12.2006 14:55) *

Никак. Есть два варианта:
1) Статически определяешь такую запись:

const Max_Razm:=20;
type
record
  N :integer; {кол-во строк}
  M :integer; {кол-во столбцов}
  Matr :array[1..Max_Razm,1..Max_Razm] of Integer; {значения матрицы}
end;




такс....

ну написал эту запись, а толку?

что дальше?

blink.gif
hiv
Цитата(Димас @ 28.12.2006 15:25) *
что дальше? blink.gif

Твоя матрица будет статическая, т.е. ее размеры в ходе выполнения изменить будет нельзя, НО!
Определяя запись record, ты как бы к ней привязываешь переменные говорящие о ее заполненности по строкам и столбцам.
ЗЫ: А вообще-то это лучше делать объектом и привязывать методы (процедуры и функции) работающие с этой матрицей. Ну например сортировки, добавления и удаления столбцов и строк, и т.д. т.п.
Димас
тренировался на рекорд(записи)
на такой задачке:

Задача 1194

Известы данный о 20 сотруниках фирмы(фамилия, зарплата и пол).
определить:
а)фамилию мужчины,имебщего самую большую зарплату(считать что такой есть и он едниственый)
б)фамилию мужчины и женщины, имеющих самую маленькую зарплату(счиать что такие есть и они единственые в свой групе сотрудников)


Исходный код: blink.gif

program z1194;
   uses crt;
{-----------------------------------------------------}
  const kol_sotrudnik = 4; { количество сотрудников}
{-----------------------------------------------------}
   type
       danin_sotrudnik = record
             fam   :  string;
             zarpl :  integer;
             pol   :  string;
   end;
{----------------------------------------------------------------}
var
       mass_sotrudnik: Array[1..kol_sotrudnik] of danin_sotrudnik;
      i,max_zarpl,min_zarpl,max_i,min_i,max_vse,max_ivse,max_zarplvse:integer;
{----------------------------------------------------------------}
begin
      ClrScr;
      {---ввод и вывод максимального значения у мужиков---}
      max_zarpl:=0;

      for i:=1 to kol_sotrudnik do
      begin
           write('Фамилия  N ',i,' ');
           readln(mass_sotrudnik[i].fam);

           write('Зарплата N ',i,' ');
           readln(mass_sotrudnik[i].zarpl);

           write('Пол m/j N ',i,' ');
           readln(mass_sotrudnik[i].pol);

           writeln('--------------------');

      if (max_zarpl<mass_sotrudnik[i].zarpl) and (mass_sotrudnik[i].pol='m') then
      begin
           max_zarpl:=mass_sotrudnik[i].zarpl ;
           max_i:=i;
      end;

      end;
      writeln('самая большая зарплата мужцины в ',mass_sotrudnik[max_i].fam);
     {---***********-}

      max_zarpl:=0;

      for i:=1 to kol_sotrudnik do
      begin
          if (max_zarplvse<mass_sotrudnik[i].zarpl) and (mass_sotrudnik[i].pol='m')
      and (mass_sotrudnik[i].pol='j')
      then
      begin
           max_zarplvse:=mass_sotrudnik[i].zarpl ;
           max_ivse:=i;
      end;

      end;

      {--*************---}

      min_zarpl:=mass_sotrudnik[max_ivse].zarpl;
      for i:=1 to kol_sotrudnik do
      begin

      if (min_zarpl>mass_sotrudnik[i].zarpl) and (mass_sotrudnik[i].pol='m') then
      begin
           min_zarpl:=mass_sotrudnik[i].zarpl ;
           min_i:=i;
      end;

      end;
      writeln('самая минимальная зарплата у мужчин в ',mass_sotrudnik[min_i].fam);

      {---------------------------------------}
      min_zarpl:=mass_sotrudnik[max_ivse].zarpl;
      for i:=1 to kol_sotrudnik do
      begin

      if (min_zarpl>mass_sotrudnik[i].zarpl) and (mass_sotrudnik[i].pol='j') then
      begin
           min_zarpl:=mass_sotrudnik[i].zarpl ;
           min_i:=i;
      end;

      end;
      writeln('самая минимальная зарплата у женщин в ',mass_sotrudnik[min_i].fam);


      writeln;
      write('End');
      readln;
end.


Проверте пожалуйста всё ли правильно я написал?????? blink.gif blum.gif blink.gif

// const kol_sotrudnik = 4 - узял не 20 как сказано в задаче а 4 шоб меньше вводить wink.gif

офф... спкокойной ночи wub.gif
Димас
Цитата(Димас @ 27.12.2006 21:59) *

ну ладно....
есть ещё одна задачка на двухмерный массив

Задача1066б


Дано двухмерный массив. Удалить из него: б.) S-й столбец

Всё в задаче больше ничего не сказаноsad.gif

Блин ну помогите мне в этой задачке ?

не могу справится blink.gif

Димас
Такс, ещё одна тренировка на записи(рекорд)....

Задача 1248


В таблице хранятся следуйщие данные об учениказ: фамилия,имя,отчество,рост,маса.
Вычеслить средний рост учеников, рост самого высокого и самого низкого ученика. Сколько учеников могут заниматся в баскетбольной секции, если рост баскетболиста должен быть больше 170 см


Я реши тякс:

Program z1248;

   uses crt;

   const kol_uchniv = 10; {количество учеников}
    {------------тип------------}
   type
        dani_uchniv = record
        fam        :  string;
        imya       :  string;
        otchestvo  :  string;
        rost       :  integer;
        masa       :  integer;
   end;
   {---------------------------}

   var
   {------------------массив-----------------------}
   mass_u:Array[1..kol_uchniv] of dani_uchniv;
   {-----------------------------------------------}
   i:integer;
   s_rost:real;
   ser_rost:real;
   max_rost,max_i:integer;
   min_rost:integer;
   kol_uchniv2:integer;
Begin
ClrScr;
{------------------Таблица учеников--------------}
 {1}
 mass_u[1].fam:='Белый   ';mass_u[1].imya:=' Дима'; mass_u[1].otchestvo:='  Юрьевич   '; mass_u[1].rost:=170;
 mass_u[1].masa:=60;
 {end}

 {2}
 mass_u[2].fam:='Пупкин  ';mass_u[2].imya:=' Андрей'; mass_u[2].otchestvo:='Николаевич'; mass_u[2].rost:=175;
 mass_u[2].masa:=70;
 {end}

 {3}
 mass_u[3].fam:='Барбакарь';mass_u[3].imya:='Вика'; mass_u[3].otchestvo:='  Батьковна '; mass_u[3].rost:=155;
 mass_u[3].masa:=45;
 {end}

 {4}
 mass_u[4].fam:='Кулик   ';mass_u[4].imya:=' Вован'; mass_u[4].otchestvo:=' Батькович '; mass_u[4].rost:=185;
 mass_u[4].masa:=80;
 {end}
 {5}
 mass_u[5].fam:='Литвин';mass_u[5].imya:='   Тарас'; mass_u[5].otchestvo:=' Пукинович '; mass_u[5].rost:=170;
 mass_u[5].masa:=55;
 {end}
 {6}
 mass_u[6].fam:='Тарасюк';mass_u[6].imya:='  Саня'; mass_u[6].otchestvo:='  Батькович '; mass_u[6].rost:=170;
 mass_u[6].masa:=60;
 {end}
 {7}
 mass_u[7].fam:='Дрозач';mass_u[7].imya:='   Толя'; mass_u[7].otchestvo:='  Леонидович'; mass_u[7].rost:=190;
 mass_u[7].masa:=70;
 {end}
 {8}
 mass_u[8].fam:='Сидоров';mass_u[8].imya:='  Тарас'; mass_u[8].otchestvo:=' Иванович  '; mass_u[8].rost:=150;
 mass_u[8].masa:=55;
 {end}
 {9}
 mass_u[9].fam:='Иванов';mass_u[9].imya:='   Саня'; mass_u[9].otchestvo:='  Иванович  '; mass_u[9].rost:=200;
 mass_u[9].masa:=90;
 {end}
 {10}
 mass_u[10].fam:='Куку';mass_u[10].imya:='    Натали'; mass_u[10].otchestvo:='Ивановна  '; mass_u[10].rost:=190;
 mass_u[10].masa:=70;
 {end}
{-----------------------------------------------}
         textcolor(2);
         writeln('-----------------------------------------------------------------');
         writeln('| N/N | Фамилия  | Имя     |   Отчество   |  Рост(см) |  Маса(кг)|');
         writeln('-----------------------------------------------------------------');
{---------------------Цыкл для вывода-------------------}
     textcolor(7);

for i:=1 to kol_uchniv do
 begin
    writeln('   ',i,'    ',mass_U[i].fam,'   ',mass_U[i].imya,'      ',mass_U[i].otchestvo,'      ', mass_u[i].rost,
    '     ',mass_u[i].masa);
 end;
{------------------Цыкл для середнього роста--------------------------}
    s_rost:=0;

for i:=1 to kol_uchniv do
  begin
    {----ниже формула сумы ростов----}
    s_rost:=s_rost + mass_u[i].rost;
  end;
{-----------Средний рост------------}
    ser_rost:=s_rost/kol_uchniv;
{-----------------------------------}

{---------------цыкл для вычисления максимального роста учеников---------------------}
   max_rost:=0;
    max_i:=0;
   for i:=1 to kol_uchniv do
    begin
          if (max_rost<mass_u[i].rost)
    then

      begin
           max_rost:=mass_u[i].rost ;
           max_i:=i;
      end;

      end;
   textcolor(7);
{---------------------------------конец цыкла max------------------------------}

{--------------------цыкл для вычисления минимального роста учеников----------}
   min_rost:=mass_u[max_i].rost;

for i:=1 to kol_uchniv do
  begin
    if min_rost>mass_u[i].rost
  then
  min_rost:=mass_u[i].rost;
  {min_i:=i;}
  end;
{--------------------------------конец цыкла min-------------------------------}

{------------------------Вычисления баскетболистов---------------------------}

   kol_uchniv2:=kol_uchniv;

for i:=1 to kol_uchniv do
 begin
   if mass_u[i].rost<170
 then
 kol_uchniv2:=kol_uchniv2-1;

end;
{---------------------конец вычисления баскетболистов---------------------------------------------}

{---------------------------------Вывод итогов--------------------------------------}
textcolor(2);
   writeln('--------------------------------------------------------------');
textcolor(4);

  writeln(' Cередний Рост Учеников = ', ser_rost:5:1 ,' см');
   writeln;
  writeln(' Рост самого высокого Ученика = ',mass_u[max_i].rost,' см');
   writeln;
  writeln(' Рост самого низкого Ученика = ',min_rost);
   writeln;
  writeln(' Могут Заниматься в Баскетбольной Секции Только ',kol_uchniv2,' чел ',' из ',kol_uchniv,' чел' );
   textcolor(2);
   writeln('--------------------------------------------------------------');
   textcolor(9);
   writeln('Made in Ukrane! Produce By STORM!');
   textcolor(2);
   writeln('Для завершения просмотра нажмите любую клавишу');
readkey;
end.



И теперь думаю немного с записями разрулился smile.gif

теперь мне не составит труда решить задачу 1066б smile.gif

Спасибо всем кто помогал! с Наступающим 2007 новым годом Всех!!!!! no1.gif

офф smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.