Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516

Почему переменной не присваивается значение?

06.11.2019, 12:29. Показов 4689. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся в программе с необъяснимой ошибкой - в строке 94 ячейке массива не присваивается значение:
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
program ServerLife;
 
uses System.Net, System.Net.Sockets, System.IO;
 
var
  server: TcpListener := new TcpListener(IPAddress.Any, 5000);
  BreakPr := True;
  f: text;
  pow := biginteger.pow(2, 400);
 
begin
  writeln('IP:', Dns.GetHostByName(Dns.GetHostName()).AddressList.ToArray());
  assign(f, 'Data.txt');
  var BestRes, BestComb: BigInteger;
  
  //Ввод данных с файла
  writeln('Ввод данных с файла');
  var p := -1;
  var sd: array of string := ('0 0', string('0'));
  if not (FileExists('Data.txt')) then
    writealllines('Data.txt', sd);
  var NotProcessed := new BigInteger[0, 2];
  foreach var s: string in readlines('Data.txt') do
  begin
    if p = -1 then
    begin
      BestRes := s.ToWords.ElementAt(0).ToBiginteger;
      BestComb := s.ToWords.ElementAt(1).ToBiginteger;
    end
    else
    begin
      SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
      NotProcessed[p, 0] := s.ToWords.ElementAt(0).ToBiginteger;
    end;
    inc(p);
  end;
  
  //Тело программы
  writeln('Тело программы');
  server.Start();
  while BreakPr do
  begin
    
    //Вычисление обработанного количества данных в процентах:
    writeln('Вычисление обработанного количества данных в процентах:');
    
    //Введение переменных;
    var percent := '';
    var delit := biginteger.Pow(2, 400);
    var delim := NotProcessed[0, 0] * 100;
    
    //Вычисление целой части;
    repeat
      percent += (delim div delit).ToString;
      delim := delim mod delit;
    until delim div delit = 0;
    
    //Вычисление дробной части.
    percent += '.';
    loop 120 do
    begin
      percent += (delim div delit).ToString;
      delim := (delim mod delit) * 10;
    end;
    (percent + '%').Println;
    
    //Запуск сервера
    writeln('Запуск сервера');
    var client := server.AcceptTcpClient();
    var stream := client.GetStream();
    
    //Получение данных
    writeln('Получение данных');
    var br := new BinaryReader(stream);
    var data := br.ReadString();
    
    //Проверка наличия ответа в запросе на данные:
    if data <> 'R' then
    begin
      
      //Нахождение лучшего результата;
      if data.ToWords.ElementAt(2).ToBiginteger > BestRes then
      begin
        BestRes := data.ToWords.ElementAt(2).ToBiginteger;
        BestComb := data.ToWords.ElementAt(1).ToBiginteger;
      end;
      
      //Удаление обработанных данных из списка необработанных.
      for var i := 0 to (NotProcessed.Length div 2) - 1 do
        if data.ToWords.ElementAt(0).ToBiginteger = NotProcessed[i, 0] then
        begin
          if i = 0 then
          begin
            NotProcessed[0, 0] += 1000000;
            if NotProcessed[0, 0] > pow then
              NotProcessed[0, 0] := pow;
            NotProcessed[0, 1] := 0;
          end
          else
          begin
            for var k := i to (NotProcessed.Length div 2) - 2 do
            begin
              NotProcessed[i, 0] := NotProcessed[i + 1, 0];
              NotProcessed[i, 1] := NotProcessed[i + 1, 1];
            end;
            SetLength(NotProcessed, (NotProcessed.Length div 2) - 1, 2);
          end;
        end;
    end;
    
    //Проверка на наличие данных с просроченным ответом;
    data := '';
    var seconds := True;
    for var i := 0 to (NotProcessed.Length div 2) - 1 do
      if ((milliseconds - NotProcessed[i, 1] > 1000000) or (NotProcessed[i, 1] = 0)) and Seconds then
      begin
        data := NotProcessed[i, 0].ToString;
        NotProcessed[i, 1] := milliseconds;
        Seconds := False;
      end;
    
    
    //Добавление нового элемента в массив.
    if Seconds then
    begin
      SetLength(NotProcessed, (NotProcessed.Length div 2) + 1, 2);
      (NotProcessed[(NotProcessed.Length div 2) - 1, 0], NotProcessed[(NotProcessed.Length div 2) - 1, 1]) := (NotProcessed[0, 0], NotProcessed[0, 1]);
      NotProcessed[0, 0] := (NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000 > pow) ? pow : NotProcessed[(NotProcessed.Length div 2) - 1, 0] + 1000000;
      NotProcessed[0, 1] := milliseconds;
      data += NotProcessed[0, 0].ToString;
    end;
    
    //Передача данных
    writeln('Передача данных');
    var bw := new BinaryWriter(stream);
    bw.Write(data);
    bw.Flush();
    
    //Остановка сервера
    writeln('Остановка сервера');
    stream.Close();
    client.Close();
    
    //Запись данных в файл
    writeln('Запись данных в файл');
    rewrite(f);
    println(f, BestRes, BestComb);
    for var i := 0 to (NotProcessed.Length div 2) - 1 do
      Println(f, NotProcessed[i, 0]);
    close(f);
    BreakPr := (NotProcessed.Length = 2) and (NotProcessed[0, 0] = pow) ? False : True;
  end;
end.
Что скажете?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2019, 12:29
Ответы с готовыми решениями:

Не присваивается значение переменной элементу массива в модуле.
проблема такая, есть программа: uses modulx; begin init; {raschet znachenyi funkcii} rzf(xmax,x,y,n); {minimalnoe i...

Почему не присваивается минимальное по модулю значение?
Почему не присваивается минимальное значение? Нахожу наименьшее по модулю значение среди элементов побочной диагонали. Program 123; var...

Обменять значения переменной, имеющей наибольшее значение с переменной, имеющей наименьшее значение
Даны значения трех вещественных переменных a, b и c, отличные друг от друга. Обменять значения переменной, имеющей наибольшее значение с...

29
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
12.11.2019, 13:09  [ТС]
Студворк — интернет-сервис помощи студентам
К двумерному массиву
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
12.11.2019, 13:26
Да понятно, конкретно тип какой?
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
12.11.2019, 14:17  [ТС]
of byte
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
12.11.2019, 15:10
Цитата Сообщение от ProMix0 Посмотреть сообщение
К двумерному массиву
что из тебя всё нужно клещами тянуть? ты что-то скрываешь?

Pascal
1
2
3
4
5
begin
  var nul := new byte[5,10];
  nul.Fill((i,j)->byte(0));
  nul.PrintLn
end.
а вообще - не используй тип byte, integer гораздо кузявней!
1
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
12.11.2019, 17:09
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
вообще - не используй тип byte
Нет ну в массивах это хотя бы смысл имеет, в отличии от объявления byte на стеке, тем более в качестве счётчика for.
То есть работать оно всё равно будет медленнее чем integer, но в массиве хотя бы память экономится на сколько то...

Цитата Сообщение от ProMix0 Посмотреть сообщение
of byte
Ну, что делать вам уже объяснили. Могу объяснить только почему так:
Это баг компилятора, хорошо известный. .Fill это extentionmethod, то есть на самом деле не метод array[,] of T, а перекрашенная глобальная подпрограмма.
Когда компилятор пытается выбрать какой T брать - смотрит одинаково и на self (то есть ваш массив) и на лямбду. Из self T получается byte, а из лямбды - integer. Компилятор офигевает и на всяк кидает ошибку.
Ну а баг в том, что смотреть правильно сначала на self, а потом уже на параметры.
1
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
13.11.2019, 14:13  [ТС]
Хм, я пробовал явное приведение - не работало

Добавлено через 54 минуты
Пока все тут - пара вопросов:
1)Можно ли в паскале работать с именами файлов типа *.txt?
2)Можно ли функцией вызвать функцию, переданную как параметр?
3)Почему строка
Pascal
1
var IPS := w.DownloadString('https://yadi.sk/d/PxPMNsfO7IDQ4g').ToWords('I').Print
без print выдаёт ошибку: Нельзя преобразовать тип IEnumerable<string> к array of string?

Добавлено через 16 минут
Хотя третью проблему я уже решил
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
13.11.2019, 14:28
Цитата Сообщение от ProMix0 Посмотреть сообщение
1)Можно ли в паскале работать с именами файлов типа *.txt?
Какая разница какое расширение? Всё для работы с файлами в System.IO.

Цитата Сообщение от ProMix0 Посмотреть сообщение
Можно ли функцией вызвать функцию, переданную как параметр?
Так для того передача подпрограмм как параметров и придумана. Переданная параметром подпрограмма называется callback, потому что работает как вызов назад, к тому что было на стеке ниже:
Pascal
1
2
3
4
5
6
7
8
9
procedure p1(p: integer->()); // p может быть любая подпрограмма, которая принимает integer и возвращает ничего (то есть это процедура)
begin
  p(5);
end;
 
begin
  p1(i->Writeln(i));
  p1(i->Writeln(i*i));
end.
Цитата Сообщение от ProMix0 Посмотреть сообщение
Нельзя преобразовать тип IEnumerable<string> к array of string?
Потому что .Print это метод последовательностей и возвращает он последовательность, то есть IEnumerable<...> (который чаще известен как sequence of ... в данном языке, но так то это одно и то же)
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
13.11.2019, 14:49  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Какая разница какое расширение?
Я имел в виду, к примеру, копирование всех файлов, имеющих расширение txt (*.txt) или удаление всех файлов с названием ToErase (ToErase.*) и т.д. (File*.txt, ???.*, Work2019.12.*.doc) как в CMD
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
13.11.2019, 15:28
System.IO.Directory.EnumerateFiles
Там несколько перегрузок, почитайте как использовать на msdn. И посмотрите на всё остальное в Directory, там куча всего полезного.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
13.11.2019, 16:05  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2019, 16:05
Помогаю со студенческими работами здесь

Почему переменной не присваивается суммовое значение
Range(&quot;D1&quot;).Formula = &quot;=COUNT(B2:B1000)&quot; Range(&quot;E1&quot;).Formula = &quot;=SUM(C2:C1000)&quot; Dim e As Long Dim y As Long Dim x As...

Присваивает переменной не то значение (при x=y=z=0, n=4, но почему-то переменная a, которой присваивается n + 0,006 )
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; int main() { setlocale(LC_ALL, &quot;Rus&quot;); float...

Значение присваивается переменной, но не присваивается TexBox
есть функция public static void ControllerInfo(string name, ref string customer, ref int addres) которая возвращяет ссылку на переменную,...

Почему переменной присваивается произвольное значение("мусор")?
Мой черновой вариант кода. Он очень черновой так что многое не суть важно, но переменной х я присваиваю значение 0. Если после приглашения...

Не присваивается значение переменной
private void button1_Click(object sender, EventArgs e) { double OhmMMcl=0; double OhmMMst=0; ...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru