Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 13

Переписать код, не используя break и найти почему не всегда считает правильно, в чём ошибка?

15.11.2014, 15:47. Показов 651. Ответов 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
const
  nmax = 100;
 
var
  a: array [1..nmax, 1..nmax] of real;
  n, i, j, imin, jmin: byte;
  buf, s: real;
 
begin
  writeln('Введите n-размерность матрицы, o<n<=',nmax);
  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
      write(a[i, j]);
    writeln;
  end;
  
  
  writeln('Первое задание:Cумма элементов строк , образующих строго убывающую последовательность');
  s:=0;
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      if a[i, j] < a[i, j + 1]
                     then
        break;
      if a[i, j] > a[i, j + 1]
                     then
      
        s := s + a[i,j];
    end;
  end;
  if s = 0 then writeln('Таких строк нет')
  else
    writeln('Sum=', s);
  
  
  writeln('Второе задание');
  imin := 1; jmin := 1;
  for i:=1 to n do
  for j:=1 to n do
  begin
  if (((i = j) or (i + j = n + 1))) and (abs(a[i, j]) < abs(a[imin, jmin])) then 
  begin
    imin := i;
    jmin := j;
    end;
  end;
  writeln;
  writeln('Минимальный по модулю элемент диагоналей:', a[imin, jmin], ' в строке ', imin, ', в столбце ', jmin);
  if n mod 2 = 1 then
  begin
    if imin = n div 2 + 1 then writeln('Мин. элемент находится на пересечении диагоналей, обмен невозможен') else
    begin
      buf := a[imin, jmin];
      a[imin, jmin] := a[n div 2 + 1, n div 2 + 1];
      a[n div 2 + 1, n div 2 + 1] := buf;
      
    end;
  end;
  if n mod 2 = 0 then
  begin;
    buf := a[imin, jmin];
    a[imin, jmin] := a[n, n];
    a[n, n] := buf;
  end;
  writeln('Преобразованная матрица:');
  for i := 1 to n do
  begin
    for j := 1 to n do
      write(a[i, j]);
    writeln;
  end;
end.



Само задание звучит следующим образом:
Дана действительная квадратная матрица порядка n, все элементы которой различны

1)Найти сумму элементов тех строк, элементы которых образуют строго убывающую последовательность
(это в программе у меня считает не всегда верно, где ошибка??)

2)Найти наименьший по модулю элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей , если n-чётное. Если n-нечётное, поменять местами этот наименьший элемент с последним элементом этой матрицы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2014, 15:47
Ответы с готовыми решениями:

Почему не всегда правильно считает сумму?
Всем хорошего дня. Помогите разобраться где ошибка. Условие задачи: пользователь вводит количество слагаемых (n) и переменную х. Нужно...

В чем ошибка?Считает сумму, но забывает всегда по 1 цифру
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale&gt; int main() { setlocale (0,&quot;&quot;); int n, a , sum=0; printf(&quot;Введите...

не правильно считает сумму в чем ошибка
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; int fak(int K){ int s; for(s=1;K&gt;0;K--) ...

2
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.11.2014, 18:17
Цитата Сообщение от КудрявоеЧудо Посмотреть сообщение
стоящим на пересечении этих диагоналей , если n-чётное.
Если n четное, то диагонали не пересекаются и наоборот

Добавлено через 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
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
uses crt;
const nmax = 100;
var a: array [1..nmax, 1..nmax] of real;
    n, i, j, k, v, imin, jmin: byte;
    buf, s: real;
begin
writeln('Введите n-размерность матрицы, o<n<=',nmax);
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;
clrscr;
writeln('Дана матрица:');
for i := 1 to n do
 begin
  for j := 1 to n do
  write(a[i, j]:5:1);
  writeln;
 end;
writeln('Первое задание:Cумма элементов в строках , образующих строго убывающую последовательность');
k:=0;
for i := 1 to n do
 begin
  v:=0;
  j:=1;
  while(j<n)and(v=0) do
  if a[i, j] <= a[i, j + 1] then v:=1
  else inc(j);
  if v=0 then
   begin
    k:=1;
    s:=0;
    for j:=1 to n do
    s:=s+a[i,j];
    writeln('Строка ',i,' сумма=',s);
   end;
 end;
if k=0 then writeln('Таких строк нет');
writeln('Второе задание');
imin := 1; jmin := 1;
for i:=1 to n do
for j:=1 to n do
if (((i = j) or (i + j = n + 1))) and (abs(a[i, j]) < abs(a[imin, jmin])) then
 begin
  imin := i;
  jmin := j;
 end;
writeln('Минимальный по модулю элемент диагоналей:', a[imin, jmin], ' в строке ', imin, ', в столбце ', jmin);
k:=0;
if n mod 2 = 1 then
 begin
  if imin = n div 2 + 1 then
   begin
    writeln('Мин. элемент находится на пересечении диагоналей, обмен невозможен');
    k:=1
   end
  else
   begin
    buf := a[imin, jmin];
    a[imin, jmin] := a[n div 2 + 1, n div 2 + 1];
    a[n div 2 + 1, n div 2 + 1] := buf;
   end;
 end
else
 begin
  if jmin = n then
   begin
    writeln('Мин. элемент находится в последней ячейке, обмен невозможен');
    k:=1
   end
  else
   begin
    buf := a[imin, jmin];
    a[imin, jmin] := a[n, n];
    a[n, n] := buf;
   end;
 end;
if k=0 then
 begin
  writeln('Преобразованная матрица:');
  for i := 1 to n do
   begin
    for j := 1 to n do
    write(a[i, j]:6:1);
    writeln;
   end
 end
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
12.11.2016, 15:18
Проверка на строгое убывание делается без дополнительного флага много проще:
Pascal
29
30
31
32
33
34
35
  j:=n-1;
  while (j>0) and (a[i,j]>a[i,j+1]) do Dec(j);
  if j=0 then begin
    Inc(k); s:=0;
    for j:=1 to n do s:=s+a[i,j];
    WriteLn('Строка ',i,' сумма=',s);
  end;
или даже
Pascal
29
30
31
32
33
34
35
  j:=n-1; s:=a[i,n];
  while (j>0) and (a[i,j]>a[i,j+1]) do begin
    Dec(j); s:=s+a[i,j];
  end;
  if j=0 then begin
    Inc(k); WriteLn('Строка ',i,' сумма=',s);
  end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2016, 15:18
Помогаю со студенческими работами здесь

Калькулятор JS (не всегда правильно считает / не с первого раза)
Прошу помощи :help: код: http://jsfiddle.net/iBasher/8svzfueq/ Вопрос: при введении значений в поля, такое впечатление, что...

Скрипт не всегда правильно считает сложение десятичных дробей
Добрый день. Есть файл test.php, в котором в случайном порядке генерируются два числа (с 1-2 знаками после запятой) &lt;script...

Переписать код без применения Break
есть программа но нам препод говорить что нельзя использовать Break как сделать без него??? var c, k, p: real; s, q, i, n, v:...

Почему не правильно считает?
Вот код. Смотрю по калькулятору одно число, вывод на консоле другой. Что не так? #include &lt;iostream&gt; #include &lt;cmath&gt; ...

Почему не правильно считает ?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { float vtetr; float s; float h;


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru