С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14

В каждом столбце матрицы А размера n*n поменять местами минимальный элемент и элемент, находящийся на побочной диагонали

28.02.2009, 07:27. Показов 3707. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, вот в чем дело. Я написал 3 программы, но написал неграмотно. Преподаватель сказал, что нужно их структурировать. Далее привожу тексты программ и пожелания преподавателя.
1) Написать и протестировать функцию для решения следующей задачи.
В каждом столбце матрицы А размера n*n поменять местами минимальный элемент и элемент, находящийся на побочной диагонали.(Структурировать. Сделать генератор сл. Чисел. вместо ввода вручную)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Program n1;
Uses Crt;
Var a:array[1..10,1..10] of integer;
    b:array[1..10] of integer;
    i,j,x,y,min,n:integer;
begin
  Clrscr;
  writeln('Введите размер матрицы mxn: ');
  write('n= ');readln(n);
  writeln('Введите элементы матрицы');
  for i:=1 to n do
    for j:=1 to n do begin
      write('a[',i,',',j,']= ');
      readln(a[i,j]);
    end;
    writeln('исходная матрица');
    for i:=1 to n do
    begin
      for j:=1 to n do begin
        write(a[i,j],' ');
      end;
      writeln('');
    end;
 
        for j:=1 to n do begin
     b[n+1-j]:=a[j,n+1-j]
    end;
    writeln('Побочная диагональ');
    for j:=1 to n do begin
    write(b[j]);
    end;
 
  for i:=1 to n do begin
    min:=a[1,i];
    x:=1;
    y:=i;
    for j:=1 to n do begin
      if a[j,i] < min then begin
        min:=a[j,i];
        x:=j;
        y:=i;
      end;
    end;
    a[x,y]:=b[y];
    writeln;
  end;
 
  writeln('Результирующая матрица');
  for i:=1 to n do
    begin
      for j:=1 to n do begin
        write(a[i,j],' ');
      end;
      writeln('');
    end;
  write('нажмите Enter');
  readln;
end.
2) Составить телефонный справочник, содержащий фамилию и инициалы, место работы и номер телефона. По фамилии найти номер телефона и место работы абонента. (структурировать)
Обеспечить поиск по фамилии введённой в любом регистре.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Program N10_1;
Uses Crt;
{Const fname='spisok.dat';}
{Имя файла, в который будет производиться запись}
Type face=record
      fio:string;
      telefon:string;
      work:string;
    end;
Var spravoch:array[1..5] of face;
    i,rez,j,numpos1,numpos2,numprobel:integer;
    fam,s,fio_,fam_:string;
const
  bukv1:string = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';
  bukv2:string = 'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
 
begin
  Clrscr;
  spravoch[1].fio:='Сидоров А.С.';
  spravoch[1].telefon:='223399';
  spravoch[1].work:='ООО Лидер';
 
  spravoch[2].fio:='Петрова Е.П.';
  spravoch[2].telefon:='554477';
  spravoch[2].work:='Завод кондитерских изделий';
 
  spravoch[3].fio:='Васечкин В.И.';
  spravoch[3].telefon:='623390';
  spravoch[3].work:='ООО Маршал';
 
  spravoch[4].fio:='Иванов П.В.';
  spravoch[4].telefon:='122122';
  spravoch[4].work:='ГазПром';
 
  writeln('Телефонный справочник:');
  for i:=1 to 4 do begin
    writeln('ФИО:  ',spravoch[i].fio,' ном.тел:  ',spravoch[i].telefon,' место работы:  ',spravoch[i].work);
  end;
 
  writeln('Введите фамилию для поиска (на русском языке!)');
  readln(fam);
  {переводим в нижний регистр введенную фамилию}
  numpos1:=0;
  numpos2:=0;
  for j:=1 to length(fam) do
    begin
      numpos1:=0;
      numpos2:=0;
      numpos1:=pos(fam[j],bukv1);
      numpos2:=pos(fam[j],bukv2);
      {если найден символ в одном из строк русских букв, тогда заменяем на строчные буквы}
      if (numpos1>0) or (numpos2>0) then
      begin
        if numpos1>0 then begin
          fam_:=fam_+bukv1[numpos1];
        end;
        if numpos2>0 then begin
          fam_:=fam_+bukv1[numpos2];
        end;
       end;
     end;
    {}
 
 
  rez:=0;
 
  for i:=1 to 4 do begin
    s:=spravoch[i].fio;
    fio_:='';
    numprobel:= pos(' ',s);
    for j:=1 to numprobel do
    begin
         numpos1:=0;
         numpos2:=0;
         numpos1:=pos(s[j],bukv1);
         numpos2:=pos(s[j],bukv2);
         {если найден символ в одном из строк русских букв, тогда заменяем на строчные буквы}
         if (numpos1>0) or (numpos2>0) then
         begin
           if numpos1>0 then begin
             fio_:=Fio_+bukv1[numpos1];
           end;
           if numpos2>0 then begin
             fio_:=Fio_+bukv1[numpos2];
           end;
         end;
    end;
    {проверим на совпадение фамилий}
    if (Pos(fam_,fio_))<>0 then
    begin
       rez:=1;
       write('!Найден абонент.');
       writeln('ФИО:  ',spravoch[i].fio,' ном.тел:  ',spravoch[i].telefon,' место работы:  ',spravoch[i].work);
     end;
  end;
 
 
  if rez=0 then writeln('Абонент по введенной фамилии в телефонном справочнике не найден!');
 
  write('Нажмите Enter');
  readln
end.
3) Ввести массив строк символов (текст), составленный из букв, цифр и знаков ‘+’, ‘–‘, ‘*’. Подсчитать число вхождений буквы ‘f’ в первые три группы букв (группы, состоящие только из букв (без включения цифр)) каждой строки. (Опять же структурировать)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Program Stroki;
Uses Crt;
Var s,gr:string;
    i,j,n,k,kol,l:integer;
   a:array[1..100] of string;
   b:array[1..100] of integer;
 
begin
     ClrScr;
     Write('Введите количество строк: ');
     readln(n);
     Write('Введите строки: ');
     for i:=1 to n do
     begin
       Readln(s);
       a[i]:=s;
     end;
 
     for i:=1 to n do
     begin
      s:=a[i];
      gr:='';
      k:=0;
      kol:=0;
 
      for j:=1 to (length(s)) do
       begin
        if k<3 then
         begin
          if (s[j] in ['A'..'Z']) or (s[j] in ['a'..'z']) or (s[j] in ['А'..'Я']) or (s[j] in ['а'..'я']) then
           gr:=gr+s[j]
          else
          begin
            {новая группа символов}
            {если предыдущий элемент был буквой, то увеличиваем количество групп букв}
            if (s[j-1] in ['A'..'Z']) or (s[j-1] in ['a'..'z']) or
             (s[j-1] in ['А'..'Я']) or (s[j-1] in ['а'..'я'])
             then k:=k+1;
          end;
 
 
         end
       end;
 
 
       for l:=1 to (length(gr)) do
         begin
          if gr[l]='f' then
            kol:=kol+1;
         end;
       b[i]:=kol
     end;
 
    for i:=1 to n do
    writeln(b[i]);
 
 
     Write('Нажмите Enter');
     Readln;
 
end.
Собственно, просьба помочь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2009, 07:27
Ответы с готовыми решениями:

В каждом столбце матрицы найти минимальный элемент и поменять его местами с элементом на побочной диагонали в этом столбце.
Задана квадратная вещественная матрица размером N. В каждом столбце матрицы найти минимальный...

Дана квадратная матрица. Поменять местами максимальный элемент на главной диагонали и минимальный элемент на побочной диагонали.
Дана квадратная матрица. Поменять местами максимальный элемент на главной диагонали и минимальный...

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

12
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
28.02.2009, 07:43
В первой программе точно функцию нужно, или можно процедуру? Если функцию, то какую? Что она должна выдать в качестве результата?
0
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
28.02.2009, 08:12  [ТС]
Можно хоть как, но желательно процедурами.
Заранее спасибо.

Добавлено через 19 минут 30 секунд
Ну... И дополнительный вопрос:
Ну и заодно просьба помочь с вычислением с заданной точностью.
Вычислить значение функции с заданной точностью e. Значение x изменяется в интервале [A, B] с шагом r. Вычисление у оформить как функцию, результаты вывести в виде таблицы.

https://www.cyberforum.ru/cgi-bin/latex.cgi?y=\sum_{k=0}^{\infty}\left(-1 \right)^k\:\frac{x^{2k}}{k!}

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Program Pascal;
Var k:longint;
    x,y,e,a,b,r,s:real;
function fact(n:integer):longint;
Var i:integer;
begin
  if n=0 then fact:=1
  else fact:=fact(n-1)*n;
end;
 
Begin
 
  write('Введите точность вычисления E, E= ');
  readln(e);
  writeln('Введите интервал (a,b) значений переменной Х');
  write('a= '); readln(a);
  write('b= '); readln(b);
  write('Введите шаг r, r= '); readln(r);
  x:=a-r;
  writeln('---------------------------');
  writeln('|    x      |      y      |');
  writeln('---------------------------');
  while x<=b do begin
  x:=x+r;
  y:=0;
  k:=0;
  repeat
    k:=k+1;
    if k mod 2 =0 then begin
    s:=exp(2*k*ln(x))/fact(k)
    end
    else s:=exp(2*k*ln(x))/fact(k);
    y:=y+s;
  until abs(s)<e;
 
  writeln('|   ',x:4:2,'    |     ',y:6:4,'  | ');
  end;
  writeln('---------------------------');
  writeln('Нажмите Enter');
  readln;
end.
При исполнении выдает ошибку деления на 0. С типами данных играться бесполезно. Вопрос - можно ли как-нибудь принципиально изменить вычисления и если да, то как?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
28.02.2009, 11:33
1) Написать и протестировать функцию для решения следующей задачи.
Можно хоть как, но желательно процедурами.
Извините, но это разговор немого с глухим.
Вот Вам вариант с функцией, раз уж Вам все равно, а в начале была функция. Нужно точно знать, что нужно, тогда и программа будет нормальная, а так, уж что Бог пошлет.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Program n1;
Uses Crt;
const nmax=20;{максимальный размер матрицы}
type Tstb=array[1..nmax] of integer;{тип массив-столбец}
     Tmatr=array[1..nmax] of Tstb;{тип массив столбцов}
function PMin(x:byte;m:Tstb):byte;{функция поиска позиции минимального в столбце}
var i,imin:byte;
    min:integer;
begin
min:=m[1];imin:=1;
for i:=1 to x do
if m[i]<min then
  begin
    min:=m[i];
    imin:=i
  end;
PMin:=imin
end;
Var a:Tmatr;
    n,i,j,p:byte;
    x:integer;
begin
clrscr;
randomize;{генерация псевдослучайных чисел}
repeat
write('Введите размер матрицы n=');
readln(n);
until (n>0)and(n<=nmax);
writeln('Исходная матрица:');
for j:=1 to n do {столбцы пока горизонтально}
for i:=1 to n do  {строки вертикально}
a[j,i]:=random(20);{псевдослучайные числа в инт. 0-19}
for i:=1 to n do {выводим матрицу в транспонированном виде, строки горизонтально, столбцы вертикально}
  begin
    for j:=1 to n do
    write(a[j,i]:4);
    writeln
  end;
for j:=1 to n do
  begin
    p:=Pmin(n,a[j]);{позиция миним. в столбце}
    x:=a[j,n-j+1];{на побочной}
    a[j,n-j+1]:=a[j,p];{ставим минимальный}
    a[j,p]:=x{вместо мин-элемент побочной}
  end;
writeln('Результирующая матрица:');
for i:=1 to n do
  begin
    for j:=1 to n do
    write(a[j,i]:4); {выводим транспонировано}
    writeln
  end;
write('Введите Enter');
readln
end.
Добавлено через 1 час 48 минут 56 секунд
Вот телефонный справочник в более-менее приличном виде.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Program N10_1;
Uses Crt;
const nmax=100;
Type Tface=record {тип принято начинать буквой Т}
           fio:string[20];{строки в целях экономии памяти, особенно при записи данных в типизированный или нетипизированные файлы, лучше ограничивать}
           work:string[20];
           tel:string[20];{переменные ни к чему очень длинные}
           end;
function LowCase(st:string):string;{функция перевода русских прописных букв в строчные}
var i:byte;
begin
for i:=1 to length(st) do
if st[i] in ['А'..'П']then st[i]:=chr(ord(st[i])+32){от А до П +32= от а до п}
else if st[i] in ['Р'..'Я']then st[i]:=chr(ord(st[i])+80){от Р до Я +80= от р до я}
else if st[i]='Ё' then st[i]:='ё';{буква Ё}
LowCase:=st;
end;
 
Var sp:array[1..nmax] of Tface;
    n,i,k:byte;
    fam:string[20];
 
begin
Clrscr;
repeat
write('Количество абонентов n=');
readln(n);
until (n>0)and(n<=nmax);
writeln('Введите данные об абонентах:');
for i:=1 to n do
  begin
   writeln('Абонент ',i);
   with sp[i] do
     begin
       write('Фамилия И.О.: ');readln(sp[i].fio);
       write('Место работы: ');readln(sp[i].work);
       write('Номер телефона: ');readln(sp[i].tel);
     end;
  end;
clrscr;
writeln('Телефонный справочник:':40);
writeln;
writeln('---------------------------------------------------------------');
writeln('|     Фамилия И.О.    |     Место работы     | Номер телефона |');
writeln('---------------------------------------------------------------');
for i:=1 to n do
  begin
   write('| ',sp[i].fio);
   gotoXY(23,whereY);write('| ',sp[i].work);
   gotoXY(46,whereY);write('| ',sp[i].tel);
   gotoXY(63,whereY);write('|');
   writeln;
  end;
writeln('---------------------------------------------------------------');
clrscr;
k:=0;
repeat
writeln('Введите фамилию для поиска (на русском языке!)');
readln(fam);
for i:=1 to length(fam) do {проверяем правильность ввода}
if not (fam[i] in ['А'..'п','р'..'ё']) then
   begin
     k:=1;
     break;
   end;
until k=0;{если правильно, заканчиваем}
{переводим в нижний регистр введенную фамилию}
fam:=LowCase(fam);
k:=0;
for i:=1 to n do
if LowCase(copy(sp[i].fio,1,pos(' ',sp[i].fio)-1))=fam then
{если первое слово в записи fio в нижнем регистре = введенной фамилии}
  begin
    k:=1;
    writeln('Найден абонент ',sp[i].fio);
    writeln('ном.тел:  ',sp[i].tel,' место работы:  ',sp[i].work);
    writeln;
  end;
if k=0 then writeln('Абонент по введенной фамилии в телефонном справочнике не найден!');
write('Нажмите Enter');
readln
end.
1
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
01.03.2009, 09:11  [ТС]
Огромное спасибо.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
01.03.2009, 09:41
По дополнительному вопросу.
В таких вычислениях всегда надо использовать рекуррентные зависимости, т. е. смотреть как изменяются члены последовательности, по какому закону. Тогда не надо ни степеней, ни огромных факториалов. В нашем случае при к=0, первый член=1. Начиная с к=1 идет умножение числителя на -х*х и умножения знаменателя на к, факториал. Но факториал не вычисляеися, т.к. в результате постоянного деления не появляются огромные числа.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Program Pascal;
uses crt;
Var k:longint;
    x,y,e,a,b,r,s:real;
Begin
clrscr;
  write('Введите точность вычислений E= ');
  readln(e);
  writeln('Введите интервал (a,b) значений переменной Х');
  write('a= '); readln(a);
  write('b= '); readln(b);
  write('Введите шаг r= '); readln(r);
  x:=a-r;
  writeln('---------------------------');
  writeln('|    x      |      y      |');
  writeln('---------------------------');
  while x<b do
    begin
     x:=x+r;
     y:=1; k:=0; s:=1;{при к=0  s=1;}
     repeat
       k:=k+1;
       s:=s*(-x*x)/k;{при увеличении к на 1 член последовательности умножается на (-х*х) и делится на к}
       y:=y+s;
     until abs(s)<e;
     writeln('|   ',x:4:2,'    |   ',y:7:4,'   | ');
    end;
  writeln('---------------------------');
  writeln('Нажмите Enter');
  readln
end.
1
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
05.03.2009, 07:57  [ТС]
Появились небольшие просьбы... Можно ли в телефонном справочнике сделать поиск ещё и по английским словам? И вторая просьба - в матричной задачке (которая с минимальным элементом\побочной диагональю) функцией сделать вот этот кусок:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#
 
#
 
for j:=1 to n do
 
#
 
  begin
 
#
 
    p:=Pmin(n,a[j]);{позиция миним. в столбце}
 
#
 
    x:=a[j,n-j+1];{на побочной}
 
#
 
    a[j,n-j+1]:=a[j,p];{ставим минимальный}
 
#
 
    a[j,p]:=x{вместо мин-элемент побочной}
 
#
 
  end;
И вывод матриц тоже нужно оформить как функцию.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.03.2009, 13:42
1.
Можно ли в телефонном справочнике сделать поиск ещё и по английским словам?
Так сделай, это в принципе также как и по русским. В чем проблема? Лень?
2.
И вторая просьба - в матричной задачке (которая с минимальным элементом\побочной диагональю) функцией сделать вот этот кусок:
Функцией это сделать нельзя, но можно процедурой. В этом случае не нужна первая функция, а все можно написать а одной процедуре.
Вывод матрицы тоже нельзя сделать функцией, а только процедурой. Вообще что ли в этом не понимаешь? Если спишь на лекциях, так хоть книжку прочитай и больше не пиши здесь глупости. Когда разберешся со всем и напишешь полное и четкое задание по этому вопросу, переделаю. А переписывать программу по нескольку раз в зависимости от того, что тебе взбредет в голову больше не буду.
0
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
05.03.2009, 16:16  [ТС]
Хех... Извиняюсь за неграмотное описание задачи - писал сильно торопясь и не подумав.
Итак, попытка четко все сформулировать.
Мой преподаватель жестко всех ругает за "любительское" написание программ. Под этим обозначением он понимает стиль написания без использования процедур\функций. Собственно поэтому, все, что можно, должно быть реализовано через них, а в самом теле программы должны быть лишь обращения к этим процедурам\функциям и немного остального, что автор программы не смог реализовать через них. Именно это он и понимает под словом "структурирование".
Заранее спасибо .)
0
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
09.03.2009, 12:44  [ТС]
Хм... Попытка номер 2, с конкретным описанием.
В задаче с матрицй, нужно:
1) Сделать вывод матрицы процедурой и дважды к ней обращаться - для вывода изначальной и для вывода конечной матриц.
2) Убрать функцию PMin и вместо нее сделать процедуру, которая сразу будет искать минимальный элемент и менять его местами с элементом на побочной диагонали.

Если я опять что-то сформулировал неправильно, просьба пнуть ж)

Добавлено через 18 минут 5 секунд
Ну и ещё одно, про телефонный справочник. Собственно, попытался я сделать поиск ещё и по английским буквам... Просьба проверить правильность.
Pascal
1
2
3
4
5
6
7
8
9
begin
for i:=1 to length(st) do
if st[i] in ['А'..'П']then st[i]:=chr(ord(st[i])+32){от А до П +32= от а до п}
else if st[i] in ['Р'..'Я']then st[i]:=chr(ord(st[i])+80){от Р до Я +80= от р до я}
else if st[i]='Ё' then st[i]:='ё';{буква Ё}
else if st[i] in ['A'..'Z']then st[i]:=chr(ord(st[i])+32);
LowCase:=st;
 
end;
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.03.2009, 15:16
Задача с матрицей.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Program n1;
Uses Crt;
const nmax=20;{максимальный размер матрицы}
type Tmatr=array[1..nmax,1..nmax] of integer;
procedure Vvod(var x:byte; var m:Tmatr);
var i,j:byte;
begin
repeat
write('Введите размер матрицы ');
readln(x);
until (x>0)and(x<=nmax);
for i:=1 to x do
for j:=1 to x do
m[i,j]:=random(20);
end;
procedure Vyvod(x:byte; var m:Tmatr);
var i,j:byte;
begin
for i:=1 to x do
  begin
    for j:=1 to x do
    write(m[i,j]:4);
    writeln;
  end;
end;
procedure Obmen(x:byte;var m:Tmatr);
var i,j,imin:byte;
    min,b:integer;
begin
for j:=1 to x do
  begin
   min:=m[1,j];imin:=1;
   for i:=1 to x do
   if m[i,j]<min then
     begin
       min:=m[i,j];
       imin:=i;
     end;
   b:=m[x-j+1,j];{на побочной}
   m[x-j+1,j]:=m[imin,j];{ставим минимальный}
   m[imin,j]:=b{вместо мин-элемент побочной}
 end;
end;
var a:Tmatr;
    n:byte;
begin
clrscr;
randomize;
Vvod(n,a);
writeln('Исходная матрица:');
Vyvod(n,a);
Obmen(n,a);
writeln('Результирующая матрица:');
Vyvod(n,a);
write('Введите Enter');
readln
end.
Добавлено через 17 минут 46 секунд
Вот условие задачи про телефонный справочник.
2) Составить телефонный справочник, содержащий фамилию и инициалы, место работы и номер телефона. По фамилии найти номер телефона и место работы абонента. (структурировать)
Обеспечить поиск по фамилии введённой в любом регистре.
Здесь ничего не написано про русские и английские буквы, Вы это выдумали от большого ума и пудрите мозги мне и преподавателю.
Просьба проверить правильность.
А почему я должен проверять, у Вас что, Паскаля нет? Так купите.
Кстати строки
if st[i] in ['А'..'П']then st[i]:=chr(ord(st[i])+32){от А до П +32= от а до п}
else if st[i] in ['A'..'Z']then st[i]:=chr(ord(st[i])+32);
можно объединить, и там и там +32
if st[i] in ['А'..'П','A'..'Z']then st[i]:=chr(ord(st[i])+32)
1
0 / 0 / 0
Регистрация: 27.02.2009
Сообщений: 14
10.03.2009, 06:29  [ТС]
Благодарю.
Про пудренье мозгов - не пудрю ни я преподавателю, ни преподаватель мне, а паскаль нам обоим, ибо в родном ВУЗе стоит паскаль, не поддерживающий русский ввод. А из-за системы администраторов ни у него, ни у меня нет прав что-то менять, а глав. админу все лень ж)
А насчет проверки - просто когда я это писал, я руководствовался "родной", ВУЗовской методичкой, в которой, цитирую:
Коды букв в принятой системе следующие.
A – Z : 65 – 95,
a – z : 97 – 122,
А – Я : 128 – 159, (А – П : 128 – 143, Р – Я : 144 – 159),
а – п : 160 – 175, р – я : 224 – 239,
Ё, ё : 240, 241, Е, е: 133, 165.
Но сейчас я уже пошарился по интернету и убедился, что таки не до 95, а до 90 .)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
10.03.2009, 06:35
Кстати для английского текста, чтобы читать в любом регистре, все это можно не делать, а наоборот перевести все символы английских букв в верхний регистр функцией UpCase,
for i:=1 to length(s) do
s[i]:=UpCase(s[i]);
Все символы кроме ['a'..'z'] не изменяются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2009, 06:35
Помогаю со студенческими работами здесь

Массив: В матрице поменять местами максимальный элемент главной диагонали и минимальный элемент побочной диагонали
В целочисленной квадратной матрице поменять местами максимальный элемент главной диа-гонали и...

Найти минимальный элемент каждого столбца матрицы и поменять его местами с элементом побочной диагонали
Уважаемые форумчане , прошу помочь с программой данного содержания: &quot;Дана квадратная матрица, в...

В каждой строке матрицы поменять местами минимальный элемент и элемент побочной диагонали
Помогите, а то я не бум бум)):wall: Задана матрица Х, где N&lt;=15. В каждой строке матрицы поменять...

Поменять местами минимальный элемент и элемент побочной диагонали в каждой строке
Помогите кто может. Надо решить следующую задачу: Задан массив. Поменять местами минимальный...

Поменять местами минимальный элемент и элемент побочной диагонали в каждой строке
Помогите плиз решить задачу по двумерному массиву!!! очень нужно! буду очень благодарна! заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru