Size: a a a

2020 July 31

П

Петр in supapro.cxx
Добрый день! Стоит задача заполнить массив по спирали по часовой стрелке.                                                                               #include <iostream>
#include <iomanip>
using namespace std;

int main() {
 int a[100][100];
 
 int n, m, count = 1;
 cin >> n >> m;
 
 int S = 0, Calc = 1, x1 = 1, y1 = 1,

 S2 = 0, Calc2 = 2, x2 = 2,  y2 = m,

 S3 = 1, Calc3 = m - 1, x3 = n , y3 = m - 1,

 S4 = 2, Calc4 = n - 2, x4 = n - 2, y4 = 1;
 


 
   for (int i = 0; i < (m*n);i++) {
           for (y1; y1 <= m-S; y1++) {
       a[x1][y1] = count;
       count++;
     }
     Calc++;
     x1++;
     y1 = Calc;
     S++;
     if (count == (m*n)) {
       break;
     }
           for (x2; x2 >= n - S2; x2++) {
       a[x2][y2] = count;
       count++;
     }
     Calc2++;
     x2 = Calc2;
     y2--;
     S2++;
     if (count == (m*n)) {
       break;
     }
           for (y3; y3 >= S3; y3--) {
       a[x3][y3] = count;
       count++;
     }
     Calc3--;
     x3--;
     y3 = Calc3;
     S3++;
     if (count == (m*n)) {
       break;
     }
           for (x4; x4 >= S4; x4--) {
       a[x4][y4] = count;
       count++;
     }
     Calc4--;
     x4 = Calc4;
     y4++;
     S4++;
     if (count == (m*n)) {
       break;
     }

   }
 
 




 //вывод
 for (int i = 1; i < n + 1; i++) {
   for (int j = 1; j < m + 1; j++) {
     cout.width(2);
     cout.fill(' ');
     cout << a[i][j] << "  ";

   }
   cout << endl;
 }
 return 0;

}
Выходит ошибка    Необработанное исключение по адресу 0x00BB697B в ConsoleApplication1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00500090 на строке                                 ''' a[x2][y2] = count;  '''
источник

C

CodeDetector in supapro.cxx
Петр
Добрый день! Стоит задача заполнить массив по спирали по часовой стрелке.                                                                               #include <iostream>
#include <iomanip>
using namespace std;

int main() {
 int a[100][100];
 
 int n, m, count = 1;
 cin >> n >> m;
 
 int S = 0, Calc = 1, x1 = 1, y1 = 1,

 S2 = 0, Calc2 = 2, x2 = 2,  y2 = m,

 S3 = 1, Calc3 = m - 1, x3 = n , y3 = m - 1,

 S4 = 2, Calc4 = n - 2, x4 = n - 2, y4 = 1;
 


 
   for (int i = 0; i < (m*n);i++) {
           for (y1; y1 <= m-S; y1++) {
       a[x1][y1] = count;
       count++;
     }
     Calc++;
     x1++;
     y1 = Calc;
     S++;
     if (count == (m*n)) {
       break;
     }
           for (x2; x2 >= n - S2; x2++) {
       a[x2][y2] = count;
       count++;
     }
     Calc2++;
     x2 = Calc2;
     y2--;
     S2++;
     if (count == (m*n)) {
       break;
     }
           for (y3; y3 >= S3; y3--) {
       a[x3][y3] = count;
       count++;
     }
     Calc3--;
     x3--;
     y3 = Calc3;
     S3++;
     if (count == (m*n)) {
       break;
     }
           for (x4; x4 >= S4; x4--) {
       a[x4][y4] = count;
       count++;
     }
     Calc4--;
     x4 = Calc4;
     y4++;
     S4++;
     if (count == (m*n)) {
       break;
     }

   }
 
 




 //вывод
 for (int i = 1; i < n + 1; i++) {
   for (int j = 1; j < m + 1; j++) {
     cout.width(2);
     cout.fill(' ');
     cout << a[i][j] << "  ";

   }
   cout << endl;
 }
 return 0;

}
Выходит ошибка    Необработанное исключение по адресу 0x00BB697B в ConsoleApplication1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00500090 на строке                                 ''' a[x2][y2] = count;  '''
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
источник

ПК

Побитый Кирпич... in supapro.cxx
Петр
Добрый день! Стоит задача заполнить массив по спирали по часовой стрелке.                                                                               #include <iostream>
#include <iomanip>
using namespace std;

int main() {
 int a[100][100];
 
 int n, m, count = 1;
 cin >> n >> m;
 
 int S = 0, Calc = 1, x1 = 1, y1 = 1,

 S2 = 0, Calc2 = 2, x2 = 2,  y2 = m,

 S3 = 1, Calc3 = m - 1, x3 = n , y3 = m - 1,

 S4 = 2, Calc4 = n - 2, x4 = n - 2, y4 = 1;
 


 
   for (int i = 0; i < (m*n);i++) {
           for (y1; y1 <= m-S; y1++) {
       a[x1][y1] = count;
       count++;
     }
     Calc++;
     x1++;
     y1 = Calc;
     S++;
     if (count == (m*n)) {
       break;
     }
           for (x2; x2 >= n - S2; x2++) {
       a[x2][y2] = count;
       count++;
     }
     Calc2++;
     x2 = Calc2;
     y2--;
     S2++;
     if (count == (m*n)) {
       break;
     }
           for (y3; y3 >= S3; y3--) {
       a[x3][y3] = count;
       count++;
     }
     Calc3--;
     x3--;
     y3 = Calc3;
     S3++;
     if (count == (m*n)) {
       break;
     }
           for (x4; x4 >= S4; x4--) {
       a[x4][y4] = count;
       count++;
     }
     Calc4--;
     x4 = Calc4;
     y4++;
     S4++;
     if (count == (m*n)) {
       break;
     }

   }
 
 




 //вывод
 for (int i = 1; i < n + 1; i++) {
   for (int j = 1; j < m + 1; j++) {
     cout.width(2);
     cout.fill(' ');
     cout << a[i][j] << "  ";

   }
   cout << endl;
 }
 return 0;

}
Выходит ошибка    Необработанное исключение по адресу 0x00BB697B в ConsoleApplication1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00500090 на строке                                 ''' a[x2][y2] = count;  '''
Выход за пределы массива
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
корутины  выглядят как синхронные функции, но на самом деле асинхронные. Асинхронность + лайфтайм модель С++ = высокий шанс отстрела ноги. В С#, Откуда пришли текущие корутины таких проблем нет, потому что там модель лайфтайма как-будто все переменные это std::shared_ptr
Эти асинхронные функции имеют лайфтайм меньше чем потоки
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Эти асинхронные функции имеют лайфтайм меньше чем потоки
а надо меньше чем Context, который ты туда суёшь
источник

DP

Denis Paukaev in supapro.cxx
Поэтому для них справедливо все то же что и для передачи ссыдок в поток
источник

ПК

Побитый Кирпич... in supapro.cxx
А он суётся неявно, например, this
источник

П

Петр in supapro.cxx
Побитый Кирпич
Выход за пределы массива
Да, но я не пойму, почему? Можете подсказать ошибку в алгоритме? Я иду по верхней, нижней, левой и правой строчкам, сужая их размер ближе к центру
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
А он суётся неявно, например, this
Ну так давайте явно сувать )
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Поэтому для них справедливо все то же что и для передачи ссыдок в поток
Но несправедливо то, что применяется к синхронному коду
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
Но несправедливо то, что применяется к синхронному коду
Почему нет ?
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Ну так давайте явно сувать )
То что надо "давайте" уже говорит что шанс отстрела ноги выше
источник

DP

Denis Paukaev in supapro.cxx
На одном потоке может работать 100 корутин, код все равно будет синхронным
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Почему нет ?
Потому что если я в синхронном коде зашарил что то по ссылке, то там это норм
источник

DP

Denis Paukaev in supapro.cxx
С корутинами это тоже норм
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
На одном потоке может работать 100 корутин, код все равно будет синхронным
Асинхронным он будет, ты путаешь понятия. Или ты думаешь что не бывает асинхронных однопоточных серверов?
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
Асинхронным он будет, ты путаешь понятия. Или ты думаешь что не бывает асинхронных однопоточных серверов?
Или ты путаешь, поток выполняет код синхронно
источник

ПК

Побитый Кирпич... in supapro.cxx
если я пишу:
foo();
co_await bar();
baz();

Этот код не синхронный
источник

ПК

Побитый Кирпич... in supapro.cxx
foo и baz выполняются асинхронно на одном потоке
источник

DP

Denis Paukaev in supapro.cxx
То что ты называешь асинхроно это то что ОС не крутит спинлок а дёргает по событию
источник