Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
1

Почему код компилится и логика верна, а результаты арифм. операций нет?

30.01.2016, 20:47. Просмотров 298. Ответов 13
Метки нет (Все метки)

Почему код компилится и логика верна, а результаты арифм. операций нет?

задача состоит в создании двух массивов склавиатуры и суммы их елементов вместе и поотдельности.Аналогично с разницей.
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
program Numbermass;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows;
     var
a:array of integer;
b:array of integer;
    sum, r,an,bn, n,x,i:integer;
    s1:string;
 
 
procedure MyWriteln(const S: string);
var
  NewStr: string;
begin
  SetLength(NewStr, Length(S));
  CharToOem(PChar(S), PChar(NewStr));
  Writeln(NewStr);
end;
 
 
   procedure mascreate();
   begin
  MyWriteln('Введите количество елементов первого  массива');
    Readln(n);
    an:=n;
    setlength(a,n);
           for i:=0 to an-1 do
                 begin
                     s1:='Введите значение'+' '+Inttostr(i)+' '+ 'елемента  массива';
                    MyWriteln(s1);
                      Readln(a[i]);
                  end;
   MyWriteln('Первый массив целых чисел заполнен');
 
      MyWriteln('Введите количество елементов второго  массива');
    Readln(n);
    bn:=n;
    setlength(b,n);
           for i:=0 to bn-1 do
                 begin
                   s1:='Введите значение'+' '+Inttostr(i)+' '+ 'елемента  массива';
                    MyWriteln(s1);
                      Readln(b[i]);
                  end;
       MyWriteln('Второй массив целых чисел заполнен');
     Readln;
  end;
 
   procedure sumamas();
   begin
     sum:=0;
 
          for i:=1 to an do
          begin
            sum:=sum+a[i];
          end;
   MyWriteln('сумма всех елементов  первого массива');
           Writeln(sum);
             Readln;
 
          for i:=1 to bn do
          begin
            sum:=sum+b[i];
          end;
         MyWriteln('сумма всех елементов  второго массива');
           Writeln(sum);
            Readln;
          if(an>bn) then
           begin
           n:=an;
           end
           else
           begin
           n:=bn;
           end;
 
           For i:=1 to n do
                sum:=sum+a[i]+b[i];
                MyWriteln('сумма всех елементов первого и  второго массива');
           Writeln(sum);
             Readln;
 
end;
 
         procedure minusmas();
   begin
     r:=0;
          for i:=1 to an do
          begin
            r:=r-a[i];
          end;
   MyWriteln('разница всех елементов  первого массива');
           Writeln(r);
             Readln;
            for i:=1 to bn do
          begin
            r:=r-b[i];
          end;
         MyWriteln('разница всех елементов второго  массива');
           Writeln(r);
             Readln;
 
             if(an>bn) then
           begin
           n:=an;
           end
           else
           begin
           n:=bn;
           end;
 
           For i:=1 to n do
                r:=r-a[i]-b[i];
 MyWriteln('Разница всех елементов первого и  второго массива');           
Writeln(r);
             Readln;
   end;
 
 
  begin
        mascreate();
       sumamas();
       minusmas();
           MyWriteln('Для Звершения программы нажмите любую клавишу');
        Readln;
end.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2016, 20:47
Ответы с готовыми решениями:

Есть объект типа T, но если вместо него подставить вызов функции, возвращающей T, код не компилится, почему?
Есть объект типа vector<int>, но если вместо него подставить вызов функции, возвращающей...

Почему на странице нет операций чтоб выбрать например +
<?php print_r($_POST); ?> <!DOCTYPE html> <html lang="ru"> <head>...

Объясните, как работает код и почему выдает нелогичные результаты
Dim f, s As Integer f = 0 m: s = 1000 - f Write(f & " " & s & " ") ...

Указатели и массивы: почему заданный код даёт разные результаты?
Почему этот код даёт разные результаты? Что присваивается указателю во втором случае? int main()...

Простой пример из книги. Объяснить, почему код выдает такие результаты
Коллеги, привожу простой пример из книги Страуструппа. #include <iostream.h> #include...

13
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 20:58 2
В summas индексация от 1.

Добавлено через 2 минуты
Пока идёт отладка, нужно включать проверку диапазонов. В Delphi это, наверняка, есть. Может быть включением режима Debug вместо Release.
0
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
30.01.2016, 21:03  [ТС] 3
delphi 7
как это устранить
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:04 4
Что именно устранить?
0
30.01.2016, 21:04
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
30.01.2016, 21:06  [ТС] 5
что бы арифметика консольного приложения для одномерных массивов была верной,а не как на рис.
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:08 6
Это ваш код?
0
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
30.01.2016, 21:10  [ТС] 7
Да мой код.

Добавлено через 2 минуты
Когда этот код начнет правильно считать то хочу его переписать,еще не знаю,как,что бы класс на делфи получился из него.
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:12 8
Хорошо. Тогда просто подведу.
Массивы a и b - динамические, с индексацией от 0, индекс последнего элемента равен (an-1) для массива a и (bn-1) для массива b.
Это видно при вводе элементов массива.
Но при подсчёте суммы, почему-то суммируются элементы с индексами от 1 до an (или до bn).

Вроде бы диагностику я выполнил.
0
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
30.01.2016, 21:18  [ТС] 9
Поменял код в цикле индексацию с 1,носумма елементов и разница все равно при подсчете не верная.
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:24 10
Индексация динамических массивов от 0, а не от 1.
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:26 11
А ещё... Правда, что в некоторых Delphi есть такое?
0
Миниатюры
Почему код компилится и логика верна, а результаты арифм. операций нет?  
inquisitor
17 / 8 / 17
Регистрация: 22.12.2015
Сообщений: 1,966
30.01.2016, 21:43  [ТС] 12
я во всех цикла написал начало индексации с 0,а в конечно елементе добавил
-1 do
все заработало и вернопосчитало.
Вот моя делфи 7.
как данный код переписать под класс на делфи/
Почему код компилится и логика верна, а результаты арифм. операций нет?
0
ФедосеевПавел
Модератор
5039 / 2714 / 1091
Регистрация: 01.02.2015
Сообщений: 8,809
Записей в блоге: 1
30.01.2016, 21:57 13
Да, наверное, так - без копирования страниц учебника и не рассказать...
0
Puporev
Модератор
58027 / 44157 / 30502
Регистрация: 18.05.2008
Сообщений: 105,719
30.01.2016, 21:58 14
Delphi
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
program Numbermass;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Windows;
type mas=array of integer;
procedure MyWriteln(const S: string);
var NewStr: string;
begin
  SetLength(NewStr, Length(S));
  CharToOem(PChar(S), PChar(NewStr));
  Writeln(NewStr);
end;
procedure mascreate(var a:mas;var n:integer;k:byte);
var i:integer;
    s1:string;
begin
MyWriteln('Введите количество элементов '+inttostr(k)+' массива');
Readln(n);
setlength(a,n);
for i:=0 to n-1 do
 begin
  s1:='Введите значение'+' '+Inttostr(i+1)+' '+ 'элемента  массива';
  MyWriteln(s1);
  Readln(a[i]);
 end;
MyWriteln(inttostr(k)+' массив целых чисел заполнен');
end;
procedure sumamas(a:mas;n,k:integer;var sum:integer);
var i:integer;
begin
sum:=0;
for i:=0 to n-1 do
sum:=sum+a[i];
MyWriteln('сумма всех элементов '+inttostr(k)+' массива');
Writeln(sum);
Readln;
end;
 
var a,b:mas;
    na,nb,sa,sb:integer;
begin
mascreate(a,na,1);
mascreate(b,nb,2);
sumamas(a,na,1,sa);
sumamas(b,nb,2,sb);
MyWriteln('сумма всех елементов  первого и второго массива');
Writeln(sa+sb);
Readln;
MyWriteln('разница всех элементов  первого массива');
Writeln(-sa);
Readln;
MyWriteln('разница всех элементов второго  массива');
Writeln(-sb);
Readln;
MyWriteln('Разница всех элементов первого и  второго массива');
Writeln(-sa-sb);
MyWriteln('Для завершения программы нажмите любую клавишу');
Readln;
end.
0
30.01.2016, 21:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2016, 21:58

Почему не компилится
Почему не компилируется, вроде бы все правильно написал. вот сама таблица create table...

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

Behavior не компилится, не хватает конструктора. Объявляю, не компилится. Не пойму
В общем, такой вот код, но не компилируется. Что не так? Чёт не пойму вообще. /// <summary> ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.