Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 18.10.2012
Сообщений: 180

Непонятки со String

24.07.2013, 01:45. Показов 3843. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Понять не могу почему после end; значение стринг не одинаковое. Нужны идеи в чем может быть причина.
Изображения
 
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2013, 01:45
Ответы с готовыми решениями:

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

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population. Создание объектов может происходить как без...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...

52
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
26.07.2013, 15:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Drenor Посмотреть сообщение
Нужно описать немного новую ситуацию, если кто невнимательно читал.
Ситуация такова: при прозвонке цыклов в поисках ошибки оказалось что ошибка ищезла, но как только убрал инструменты прозвонки (счетчик, который никак не связан с кодом, а служил всего лишь для просмотра значений переменных на разных итерациях) ошибка вернулась. Вернул счетчик - ошибка обратно ищезла.
На всякий случай ещё раз скажи точно и полно. О какой ошибке идет речь?
0
3 / 3 / 0
Регистрация: 18.10.2012
Сообщений: 180
27.07.2013, 00:12  [ТС]
На всякий случай ещё раз скажи точно и полно. О какой ошибке идет речь?
Значения не те что нужны получаються при расчетах (муниторил переменную gama).
А если вставить совсем левый нисчем больше не связаный счетчик типа d:=d+1; то все гут работает и считает правильно.
Дилема в том что так не должно быть ибо этот счетчик ниначто не влияет.
0
Заблокирован
27.07.2013, 00:15
Ну-ну... "ни на что не влияет"...
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
27.07.2013, 00:46
Цитата Сообщение от Drenor Посмотреть сообщение
А если вставить совсем левый нисчем больше не связаный счетчик типа d:=d+1;
Приводи код с "левым" счетчиком, посмотрим и сравним.
0
Заблокирован
27.07.2013, 01:08
Суть в том, что этот "левый счётчик" как раз форсирует noopt на этот цикл. А далее уже смотреть надо в дебаггере.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
27.07.2013, 01:42
Цитата Сообщение от Dr_Quake Посмотреть сообщение
Суть в том, что этот "левый счётчик" как раз форсирует noopt на этот цикл.
Давай не будем делать выводы пока не увидим новый вариант кода. ТС уже изменил своё сообщение об ошибке. Сначала он спрашивал "почему в Edit2 и Edit3 разные значения", Теперь у него "Значения не те что нужны получаються при расчетах". Не удивлюсь если вариант кода, который он сейчас создаёт "методом тыка" сильно отличается от того, который был отформатирован Samhain.
0
3 / 3 / 0
Регистрация: 18.10.2012
Сообщений: 180
27.07.2013, 21:43  [ТС]
Вобщем тот самый код что привел в порядок Samhain.
А
Code
1
d:=d+1;
Вставлено после 124 строки, о чем я уже писал выше.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
27.07.2013, 22:13
Drenor, Прогнал твой код с выражением "10+20*2/4". На первых двух циклах k4 равнялось 1, на третьем 0. Поэтому на строку: Edit3.Text:=gama; не выходило. Вот потому и разница.
Не понял только, куда ты вставил d:=d+1? После 124 строка своего исходного кода или кода отформатированного Samhain.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
28.07.2013, 03:21
Цитата Сообщение от Drenor Посмотреть сообщение
Вобщем тот самый код что привел в порядок Samhain.
А
Code
1
d:=d+1;
Вставлено после 124 строки, о чем я уже писал выше.
Не нашел выше упоминание о том, куда была вставлена дополнительная строчка кода.

Ну и наконец. Выложи исходники своей программы и приведи начальные условия при которых она даёт неверный результат. И скажи чем этот результат неверный.

P.S. Если спрашиваешь помощи, то должен приводить максимум информации. Иначе ...

P.P.S. Да я за свой четвертьвековой опыт в программировании встречался с ситуацией когда добавление строки кода изменяло результат. Но уж никак не из-за оптимизатора Дельфи, но из-за порчи стека самой программой. В коде Samhain я сколь не старался не увидел причин для такой порчи.
0
Заблокирован
28.07.2013, 03:22
northener, запортить стэк в Delphi вообще постараться надо. Чтобы именно результат был, а не просто падение.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
28.07.2013, 03:27
Цитата Сообщение от Dr_Quake Посмотреть сообщение
northener, запортить стэк в Delphi вообще постараться надо. Чтобы именно результат был, а не просто падение.
Так я и говорю, что "встречал"! Один, два раза. Не более.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.07.2013, 03:30
Да не очень сложно запортить локальные переменные в стеке. Вот и результат изменится. Особенно если массив в стеке и выйдешь за его пределы. Не всегда Access Violation выдаёт.
0
Заблокирован
28.07.2013, 03:33
Одиночка, В Delphi не используя указатели это не сделать. А язык не предусматривает использование указателей в основном лексиконе. Можно, но не рекомендуется.
0
3 / 3 / 0
Регистрация: 18.10.2012
Сообщений: 180
28.07.2013, 03:34  [ТС]
куда ты вставил d:=d+1? После 124 строка своего исходного кода или кода отформатированного Samhain.
кода отформатированного Samhain.


Не нашел выше упоминание о том, куда была вставлена дополнительная строчка кода.
Цитата Сообщение от Drenor Посмотреть сообщение
Вставил его после 124 строки
Code
1
d:=d+1;
это сразу после поста Samhain.

Ну и наконец. Выложи исходники своей программы и приведи начальные условия
исходник я выкладывал. Samhain правильно оформил. там коеч-то неотносящееся к делу есть. его можно откинуть. а брать стоит процедуру Button1Click:

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
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
129
130
131
132
133
procedure TForm1.Button1Click(Sender: TObject);
type
  varOperat =(Plus,Minus,Mult,Divide,None);
var gama,ga,ga2,ga3:string;
    leto,i,j,k,k1,g,warning,warningHigh,dec1,dec2,dec3,dec4,dec5:integer;
    k2,k3,k4:Byte;
    Operat:varOperat;
    C,C1,Csp,Csp2:char;
    R,R1,R2,R3:real;
 
procedure AlphaA;                       {ПРОЦЕДУРА АЛЬФА. НАЧАЛО}
var i,j:integer;
begin
  dec1:=0; {Поиск знака + - * /. Начало}
  For j:=1 to leto do
    begin
      if (gama[j]='+') then Csp:=gama[j];
      if (gama[j]='-') then Csp:=gama[j];
      if (gama[j]='*') then Csp:=gama[j];
      if (gama[j]='/') then Csp:=gama[j];
      if (gama[j]='+') or (gama[j]='-') or (gama[j]='*') or (gama[j]='/')  then
        begin
          dec1:=j;
          break;
        end;
    end; {Поиск знака + - * /. Конец "dec1" - позиция}
 
{Определение числа слева\справа от знака. Начало}
  R1:=0;
  R2:=0;
  dec1:=dec1-1;
  ga:=copy(gama,1,dec1);
  R1:=(StrToFloat(ga));
  dec2:=dec1+2;
  k:=0;
  k1:=0;
  For J:= dec2 to leto do
    if (gama[j]='+') or (gama[j]='-') or (gama[j]='*') or (gama[j]='/')  then
      begin
        dec3:=j;
        break;
      end;
  For J:= dec2 to leto do
    begin
      k:=k+1;
      if (gama[j]='+') or (gama[j]='-') or (gama[j]='*') or (gama[j]='/') then
        begin
          g:=j;
          k1:=1;
          break;
        end;
    end;
  if k1 = 1 then k:=k-1;
  ga:=copy(gama,dec2,k);
  R2:=(StrToFloat(ga));
{Определение числа слева\справа от знака. Конец}
{Выполнение арифметической операции. Начало}
  If Csp = '+' then R:=R1+R2;
  If Csp = '-' then R:=R1-R2;
  If Csp = '*' then R:=R1*R2; If Csp = '/' then R:=R1/R2;
{Выполнение арифметической операции. Конец}
{Выполнение изменений гамы. Начало}
  gama:=copy(gama,g,leto);
  ga:=FloatToStr(R);
  gama:=ga+gama;
{Выполнение изменений гамы. Конец}
end;      {ПРОЦЕДУРА АЛЬФА. КОНЕЦ}
 
begin        {НАЧАЛО ПРОЦЕДУРЫ НАЖАТИЯ КНОПКИ}
  gama:=edit1.Text;  {формула}
  leto:=(length(gama)); {длина ф-лы}
  warning:=0; {Определение количества цыклов операционирования. Начало "leto" - количество}
  For i:=1 to leto do
    begin
      c:=gama[i];
      if (c='+') or (c='-') or (c='*') or (c='/') then warning:=warning+1;
    end; {Определение количества цыклов операционирования. Конец}
  For i:=1 to warning do
    begin {Тело главного кода. Начало}
      dec1:=0; {Поиск знака + - * /. Начало}
      For j:=1 to leto do
        begin
          if (gama[j]='+') then Csp:=gama[j];
          if (gama[j]='-') then Csp:=gama[j];
          if (gama[j]='*') then Csp:=gama[j];
          if (gama[j]='/') then Csp:=gama[j];
          if (gama[j]='+') or (gama[j]='-') or (gama[j]='*') or (gama[j]='/')  then
            begin
              dec1:=j;
              break;
            end;
        end;     {Поиск знака + - * /. Конец "dec1" - позиция}
{Обработка правил умножения. Начало.}
    k4:=0;
    k2:=0;
    k3:=0;
    if (Csp = '+') or (Csp = '-') then
      begin
        dec5:=dec1+1;
        for j:=dec5 to leto do
          begin
            if (gama[j]='*') or (gama[j]='/') then k2:=1;
            if (gama[j]='+') or (gama[j]='-') then k3:=1;
            if k2>k3 then
              begin
                k4:=1;
                break;
              end;
          end;
      end;
    if k4=1 then
      begin  {Изменения над гамой до Альфы. Начало}
        ga2:=copy(gama,1,dec1);
        dec4:=dec1+1;
        ga3:=copy(gama,dec4,leto);
        gama:=ga3;
        Edit4.Text:=ga2;
        Label3.Caption:=inttostr(dec1);
        Label4.Caption:=inttostr(dec4);
        Edit3.Text:=gama;
      end;
    Edit2.Text:=gama;
{Изменения над гамой до Альфы. Конец}
{Обработка правил умножения. Конец. "к4" применять протокол "1"}
    alphaA;  {Процедура Альфа}
{Изменения над гамой после Альфы. Начало}
    gama:=ga2+gama;
{Изменения над гамой после Альфы. Конец}
  end; {Тело главного кода. Конец}
  Edit5.Text:=floattostr(R);
end;
 
end.
Контролируемые значения это R - результат вычислений.

Условия: 10-6*2
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
28.07.2013, 03:36
Цитата Сообщение от Dr_Quake Посмотреть сообщение
northener, запортить стэк в Delphi вообще постараться надо. Чтобы именно результат был, а не просто падение.
Так я и говорил, что встречал такую порчу один или максимум два раза за 25 лет.
0
Заблокирован
28.07.2013, 03:41
northener, что-то ты темнишь. В C/++ такого полно даже я встречал, ну, с другой стороны, реверсинга и чего ещё повеселее, но не суть. А Delphi в 95 только появилась. Даже если брать TP и более ранние - там такое тоже не встретишь нормально.
0
3 / 3 / 0
Регистрация: 18.10.2012
Сообщений: 180
28.07.2013, 03:42  [ТС]
Вот что еще обнаружил.
если запускать файл.ехе то все считает правильно даже без левого счетчика.
а если компилировать и тестить в делфи то ошибка.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
28.07.2013, 03:47
Цитата Сообщение от Drenor Посмотреть сообщение

Контролируемые значения это R - результат вычислений.

Условия: 10-6*2
Завтра попробую пройти отладчиком по этой программе.

Добавлено через 4 минуты
Цитата Сообщение от Dr_Quake Посмотреть сообщение
northener, что-то ты темнишь.
Это в личку. Уважай правила форумов.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
28.07.2013, 04:00
Dr_Quake, Вот пример порчи значений переменных. Правда не локальных. На локальных выдало Access... А так в Label выдало 10.
Кликните здесь для просмотра всего текста
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Arr : Array[1..10] Of Integer;
  a,b,c : Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
Var
  i : Integer;
begin
  a:=0;
  b:=0;
  c:=0;
  For i:=1 To 12 Do
  Arr[i]:=10;
 
  Label1.Caption:=IntToStr(a);
end;
 
end.
1
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
28.07.2013, 04:09
Цитата Сообщение от Drenor Посмотреть сообщение
Вот что еще обнаружил.
если запускать файл.ехе то все считает правильно даже без левого счетчика.
а если компилировать и тестить в делфи то ошибка.
Не. Я не буду завтра проверять. Ибо нет в этой проверке никакого смысла.
Просто ТС не умеет пользоваться отладчиком.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.07.2013, 04:09

Ошибка PHPOfice: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name in...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например, у меня есть в определенном директории...

Как использовать String.Substring(string, string)?
Есть у String метод Substring(int, int), но он принимает только числа. Я видел на видео, что можно парсить по словам. Например: string...

AsyncTask<String, String, String> объясните пожалуйста
При описаний класса наследника AsyncTask мы в угловых скобках указываем три типа данных: 1. Тип входных данных. Это данные которые пойдут...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru