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

Pascal (матрица, string...)

20.07.2009, 00:10. Показов 4692. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста сделать следующие задачи:

1). Дана матрица размера M Ч N и целоечислоK (1 ≤K ≤M). Удалить
строку матрицы с номером K.
2). Дана матрица размера M Ч N. Упорядочить ее строки так, чтобы их
первые элементы образовывали возрастающую последовательность.
3). Дана строка-предложение нарусскомязыке. Вывести самоекороткое
слово в предложении. Если таких слов несколько, то вывести последнее
из них. Словом считать набор символов, не содержащий пробелов, знаков
препинания и ограниченный пробелами, знаками препинания или началом/концом строки.
4). Даны два файла вещественных чисел с именами S
A и S
B, содержащие
элементы квадратных матриц A и B (по строкам). Создать новый файл с
именемS
C, содержащий элементы произведения A·B. Если матрицы A и B
нельзя перемножать, то оставить файл S
C пустым.
5). Дан текстовый файл, каждая строка которого содержит изображения
нескольких чисел, разделенные пробелами (вещественные числа имеют
ненулевую дробную часть). Создать файл вещественных чисел, содержа-
щий (в том же порядке) все числа из исходного файла, имеющие ненуле-
вую дробную часть.

Добавлено через 31 минуту 51 секунду
помогите пожалуйста бедной девушке, очень срочно нужно =(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.07.2009, 00:10
Ответы с готовыми решениями:

из string в integer в Pascal
Хотелось бы узнать возможно ли строку string, например, "14 12 31" перевести из string в integer, пробовал через val, но он при виде...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Матрица в String Grid
помогите пожалуйста написать программу, которая бы с помощью генератора случайных чисел формировала матрицу 5х4 и выводила бы в String Grid

23
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 00:38
M Ч N
следует полагать M x N?

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
uses crt;
 
const MAX = 10;
 
var k, row, col : integer;
    a : array[1..MAX, 1..MAX] of Integer;
    m, n : integer;
 
begin
  ClrScr;
  Randomize;
 
  {кол-во строк и столбцов в массиве}
  m := 5;
  n := 5;
  {!ВНИМАНИЕ! но не больше константы MAX}
 
  {забиваем массив случ числами}
  for row := 1 to m do
    for col := 1 to n do
      a[row, col] := Random(100) - Random(50);
 
  Write('k = ');
  ReadLn(k);
  ClrScr;
  {печатаем массив}
  WriteLn('До удаления строки');
  for row := 1 to m do
  begin
    for col := 1 to n do
       Write(a[row, col]:4,' ');
    WriteLn;
  end;
  {удаляем строку}
  for row := k to m-1 do
    for col := 1 to n do
      a[row, col] := a[row+1, col];
  {уменьшаем кол-во строк}
  dec(m);
  {печатаем массив}
  WriteLn('После удаления строки');
  for row := 1 to m do
  begin
    for col := 1 to n do
       Write(a[row, col]:4,' ');
    WriteLn;
  end;
  ReadLn;
end.
1
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 00:47  [ТС]
да, так и надо полагать, спасибочки огромное , если можешь помоги плиз и с остальным, полный завал=(
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 01:10
У самого времени не много, самое сложное сколько смогу - помогу.
5
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
var fsrc   : Text;
    fdst   : file of Real;
    buff,s : string;
    r      : Real;
    Code,
    c, i   : Integer;
 
begin
  Assign(fsrc, 'Chisla.Txt');
  Reset(fsrc);
 
  Assign(fdst, 'Chisla.Dat');
  Rewrite(fdst);
 
  c := 0;
  while not eof(fsrc) do
  begin 
    ReadLn(fsrc, buff);
    s := '';
    i := 1;    
    REPEAT
      if (buff[i]=' ') or (i=length(buff)) then
      begin
        Val(s, r, Code);
        if Code=0 then
        begin
          Write(fdst, r);
          inc(c);
        end;
        s:='';
      end
      else
      begin
        s := s + buff[i];
      end;
      Inc(i);
    UNTIL (i > length(buff));
  end;
 
  Close(fdst);
  Close(fsrc);
 
  WriteLn('Было добавлено ',c,' чисел.');
  
  ReadLn;
end.
Пример файла Chisla.Txt
Code
1
3.14 2.03 45.09 223.09

Не по теме:

И от куда же только бедные девушки такие программки достают??? :)


спасибочки огромное
Лучше бы спасибо нажала/нажал.
2
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 01:38  [ТС]
обязательно =), "нажала" - правильный вариант. ну, в нашем универе к сожалению начальный курс программирования на паскале никто не отменял =(

Добавлено через 17 минут 29 секунд
скажи пожалуйста, я вот в файле Chisla.Txt сделала пару чисел без дробной части, и все равно пишет что добавлено 4 числа, и как проверить потом какиечисла добавлены?

и еще там в текстовом файле должно быть несколько строк с числами, глянь плиз и объясни по возможности может я чего не поняла...
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 01:43
3
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
var s, t, last : string;
    min_len,
    len, i     : integer;
 
begin
  s       := 'Это просто предложение чтобы проверить эту программу,';
  s       := s + ' можете заменить его на любое другое.';
  min_len := 1000;
  len     := length(s);
  i       := 1;
 
  WriteLn('В этом предложении мы будем имкать "', s ,'".');
 
  while (i<len) and (i<>len-1) and (s[i]<>'.') do
  begin
    {обрабатываем пробелы и прочую фигню}
    while (s[i]=' ') or (s[i]=',') do Inc(i);
 
    {мы нашли слово}
    t := '';
    while (s[i]<>' ') and (s[i]<>',') and (s[i]<>'.') and (i<=len) do
    begin
      t := t + s[i];
      Inc(i);
    end;
 
    if min_len > length(t) then
    begin
      min_len := length(t);
      last    := t;      
    end;
  end;
 
  WriteLn('Самое короткое слово "', last ,'".');  
  ReadLn;
end.
0
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 01:59  [ТС]
в этой программе если попадается два одинаковых по длине слова она выводит первое самое короткое, глянь плиз еще разок
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 02:10
Цитата Сообщение от Hrrom Посмотреть сообщение
скажи пожалуйста, я вот в файле Chisla.Txt сделала пару чисел без дробной части, и все равно пишет что добавлено 4 числа, и как проверить потом какиечисла добавлены?

и еще там в текстовом файле должно быть несколько строк с числами, глянь плиз и объясни по возможности может я чего не поняла...
Да, ты права, вот все исправлено:
5
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
var fsrc   : Text;
    fdst   : file of Real;
    buff,s : string;
    r      : Real;
    Code,
    c, i   : Integer;
 
begin
  Assign(fsrc, 'Chisla.Txt');
  Reset(fsrc);
 
  Assign(fdst, 'Chisla.Dat');
  Rewrite(fdst);
 
  c := 0;
  while not eof(fsrc) do
  begin
    ReadLn(fsrc, buff);
    s := '';
    i := 0;
    REPEAT
      Inc(i);
      if (buff[i]=' ') or (i>length(buff)) then
      begin
    Val(s, r, Code);
        if (Code=0) and (frac(r)<>0) then
        begin
          Write(fdst, r);
          inc(c);
        end;
        s:='';
      end
      else
      begin
        s := s + buff[i];
      end;
 
    UNTIL (i > length(buff));
  end;
 
  Close(fdst);
  Close(fsrc);
 
  WriteLn('Было добавлено ',c,' чисел.');
  
  ReadLn;
end.
Добавлено через 7 минут 10 секунд
Цитата Сообщение от Hrrom Посмотреть сообщение
в этой программе если попадается два одинаковых по длине слова она выводит первое самое короткое, глянь плиз еще разок
3
строка 27 замени вот это
Pascal
1
if min_len > length(t) then
на вот это
Pascal
1
if min_len >= length(t) then

Не по теме:

Ты получше проверяй, я не спал два дня... глаза слипаются, хоть спички вставляй



Давай так, если еще какие-нибудь баги/глюки или если тебе оставшиеся программы никто не поможет сделать, то пиши мне на oleg.polivets@gmail.com (за одно, свою фотку можешь кинуть ) а я спать.
1
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 02:11  [ТС]
Сейчас действительно работает =) глянь плиз 3 что я написала, в 4 вообще без понятия что делать, одно только выражение перемножить матрицы чего стоит

Добавлено через 1 минуту 14 секунд
попробу плиз сделать сейчас 4, вторую сама буду пытаться, просто мне завтра в 9:00 сдавать их(
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 02:31
OK

Добавлено через 17 минут 41 секунду
Я не пойму 4 задание, может ты мне объяснишь. Файлы вещественных чисел, которые нам даны, они в текстовом формате? Если нет то нельзя узнать сколько строк и столбцов в матрицах, которые записаны в них.
0
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 02:48  [ТС]
я даж не знаю что сказать, в задании не указыается, делай наверное так, чтобы потом можно было проверить сколько строк и столбцов и результат умножения
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
20.07.2009, 03:18
4
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
const MAXCOUNT = 30; {максимальная размерность матрицы}
type
  {прямоугольная матрица}
  Matrix = array [1..MAXCOUNT, 1..MAXCOUNT] of real;
 
var a, b, c : MATRIX;
    b_col, b_row,
    a_col, a_row : integer;
    f  : text;
 
 
procedure SaveMatrix(fn : string; m : Matrix; rows, cols : integer);
var f   : text;
    i,j : integer;
begin
  Assign(f, fn);
  Rewrite(f);
 
  for i := 1 to rows do
  begin
    for j := 1 to cols do
       Write(f, m[i, j]:2:2,' ');
    Write(f, Chr(13), chr(10));
  end;
 
  Close(f);
end;
 
 
procedure ReadMatrix(fn : string; var m : Matrix; var row : integer; var col : integer);
var fsrc   : Text;
    buff,s : string;
    r      : Real;
    Code,i : Integer;
 
begin
  Assign(fsrc, fn);
  Reset(fsrc);
 
  row := 0;
  while not eof(fsrc) do
  begin
    inc(row);
    ReadLn(fsrc, buff);
    s   := '';
    i   := 0;
    col := 0;
    REPEAT
      Inc(i);
      if (buff[i]=' ') or (i>length(buff)) then
      begin
    Val(s, r, Code);
        if (Code=0) then
        begin
          inc(col);
          m[row, col] := r;
        end;
        s:='';
      end
      else
      begin
        s := s + buff[i];
      end;
    UNTIL (i > length(buff));
  end;
 
  Close(fsrc);
end;
 
procedure MulOfMatrix(m1, m2: Matrix; var res: Matrix; n, m: integer);
var
  i, j, k: integer;
begin
  for i:=1 to m do
  for j:=1 to m do begin
  res[i,j]:=0;
  for k:=1 to n do
  res[i,j] := m1[i,k]*m2[k,j];
  end;
end;
 
begin
  ReadMatrix('SA', a, a_row, a_col);
  ReadMatrix('SB', b, b_row, b_col);
 
  if (a_row = b_col) and (a_col = b_row) then
  begin
    MulOfMatrix(a, b, c, a_row, a_col);
    SaveMatrix('SC', c, a_row, a_col);
  end
  else
  begin
    WriteLn('[ОШИБКА] : данные матрицы перемножать нельзя.');
    Assign(f, 'SC');
    Rewrite(f);
    Close(f);
  end;
 
  ReadLn;
end.
Вот вроде, работоспособная программа, но нужно отлаживать
1
149 / 139 / 57
Регистрация: 05.06.2009
Сообщений: 310
20.07.2009, 05:16
Увидел ответ в следующем посте.
0
Почетный модератор
 Аватар для Puporev
64316 / 47612 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.07.2009, 06:35
2). Дана матрица размера M Ч 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
uses crt;
const nmax=20;{макс размер матрицы}
var a:array[1..nmax,1..nmax] of integer;
    n,m,i,j,k:byte;{размеры, счетчики}
    x:integer;{буфер для обмена}
begin
clrscr;
randomize;
repeat
write('Количество строк=');
readln(m);
until m in [1..nmax];{проверяем правильность ввода, если от 1 до 20 то нормально}
repeat
write('Количество столбцов=');
readln(n);
until n in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
 begin
   for j:=1 to n do
    begin
     a[i,j]:=random(20);
     write(a[i,j]:4);
    end;
   writeln;
  end;
for i:=1 to m-1 do{сортируем первый столбец матрицы}
for j:=i+1 to m do
if a[i,1]>a[j,1] then{по возрастанию}
for k:=1 to n do{параллельно с ним переставляем элементы в других столбцах}
 begin
  x:=a[i,k];
  a[i,k]:=a[j,k];
  a[j,k]:=x;
 end;
writeln('Результат перестановки:');
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[i,j]:4);
  writeln;
 end;
readln
end.
Добавлено через 1 минуту 37 секунд
Надо бы первые 2 задачи привести к общему виду по переменным, по структуре. Выберете что Вам больше подойдет и другую перепишите.
1
0 / 0 / 0
Регистрация: 19.07.2009
Сообщений: 7
20.07.2009, 10:47  [ТС]
да, обязательно приведу, большое спасибо, если не сложно посмотрите пожалуйста еще одну задачу

Дана квадратная матрица A порядка M. Найти минимальный элемент
для каждой ее диагонали, параллельной главной (начиная с одноэлемент-
ной диагонали A[1,M]).
0
Почетный модератор
 Аватар для Puporev
64316 / 47612 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.07.2009, 11:12
Дана квадратная матрица A порядка M. Найти минимальный элемент
для каждой ее диагонали, параллельной главной (начиная с одноэлемент-
ной диагонали A[1,M]).
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 matrica;
uses crt;
const nmax=20;
var n,i,j,l,min:integer;
    a:array[1..nmax,1..nmax]of integer;
begin
clrscr;
randomize;
repeat
write('Razmer matricy n=');
readln(n);
until n in [1..nmax];
Writeln('Ishodnaja matrica:');
for i:=1 to n do
   begin
     for j:=1 to n do
         begin
           a[i,j]:=random(10);
           write(a[i,j]:3);
         end;
      writeln;
   end;
for l:=2*n-1 downto 1 do{количество диагоналей, включая главную, идем с конца}
  begin
    min:=maxint;{за минимум берем самое большое число типа integer}
    if l<=n then{выше главной и на ней, от [1,n]->[1,n] до [1,1]->[n,n]}
      begin
       for i:=n-l+1 to n do
       for j:=1 to l do
       if (j=i-n+l)and(a[i,j]<min) then min:=a[i,j];{если на этой диагонали и меньше всех}
      end
    else if l>n then{ниже главнойот [2,1]->[n,n-1] до [n,1]->[n,1]}
      begin
       for i:=1 to 2*n-l do
       for j:=l-n+1 to n do
       if (j=i+l-n)and(a[i,j]<min) then min:=a[i,j];
      end;
    writeln('Min na dyagonali ',l,' = ',min);
  end;
readln
end.
Добавлено через 51 секунду
Поправьте везде n на m, невнимательно посмотрел условие.
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
20.07.2009, 11:25
Puporev, а нельзя ли сделать так
Pascal
1
min:=a[n-l+1,1]
0
Почетный модератор
 Аватар для Puporev
64316 / 47612 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.07.2009, 11:56
Pascal
1
[B]Puporev[/B], а нельзя ли сделать так
Можно, просто думать лень было, написал на все случаи жизни.
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
20.07.2009, 11:58
Цитата Сообщение от Puporev Посмотреть сообщение
Можно, просто думать лень было, написал на все случаи жизни.
бывает))))))))
просто меня всегда напрягает почему то когда при поиске минимума берут самое большое число, а при поиске максимума самое маленькое, не знаю почему но мне лично не нравится , по этому я стараюсь брать первый элемент в сортируемом "объекте" так сказать
0
Почетный модератор
 Аватар для Puporev
64316 / 47612 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.07.2009, 12:01
Бывает что мы не можем присвоить это значение, например если нужно найти максимальный из отрицательных, а мы не знаем отрицательный первый элемент или положительный, здесь обязательно надо задавать что-то, либо в цикле идти по массиву, искать и запоминать первый отрицательный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2009, 12:01
Помогаю со студенческими работами здесь

Матрица [Pascal]
Вот две задачки. Помогите решить пожалуйста. 1.Составить программу, которая находит максимальный элемент над побочной диагональю матрицы....

Матрица , Object Pascal
Класс Матрица. Члены класса: Размерность матрицы, элементы матрицы. Методы: Конструктор , деструктор, метод вывода матрицы, проверка ,...

Pascal Снова Матрица,но...
Уваж. Програмисты, очень надо узнать,как можно написать такую програму: Дана матрица M на N, расположыть ее строки так,чтоб их первые...

Pascal.Подпрограмма и матрица.
Задание такое: Создать подпрограмму, находящую в матрице максимальный и минимальный элементы и меняющую их местами. Вот мой код. ...

Массив матрица Pascal
Заполнить массив А следующим образом: (Pascal) a) 0 0 0 ... 0 б) 1 2 3 ... 10 0 1 0 ... 0 ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru