- 1
We’ve heard your feedback that you want Visual Basic on .NET Core
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−2
We’ve heard your feedback that you want Visual Basic on .NET Core
https://devblogs.microsoft.com/vbteam/visual-basic-support-planned-for-net-5-0/
+3
Новогодний оффтоп #1
Перекатить через год.
0
#include <iostream>
using namespace std;
const char _Arr_Digit [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
_Arr_Mantissa [] = {'e', 'E'},
_Arr_Sign [] = {'-', '+'},
_Arr_Dot[] = {'.'},
_Arr_Combo[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'};
const bool DIGIT = false, SIGN = false, OTHER = true;
bool _Call_Mantissa = false, _flag_dot = false, _flag_mant = false;
int _position_mant;
bool Parse_symbol (char _symb, const char* _Arr, int _size_arr);
bool Parse_full_string (string _checking, int _offset, int _amount, bool _sec_cond, const char* _Arr, int _size_arr, bool _Drive);
bool Parse_the_first_symbol (string _checking);
bool Parse_the_second_symbol (string _checking);
bool Control_result (int i, string _checking);
bool Parse_mantissa (string _checking);
bool Parse_full_string_before_mantissa (int i, string _checking);
bool Parse_the_first_symbol_after_mantissa (string _checking);
bool Parse_full_string_after_mantissa (string _checking);
long double Questioning (char s);
long double Questioning (char s) {
string _checking;
while (true) {
cout << "Введите значение " << s << ": ";
getline(cin, _checking);
if (_checking.length() == 0)
cout << "Вы не ввели значение!" << endl;
else if (!Parse_the_first_symbol(_checking))
cout << "Некорректное значение!" << endl;
else return strtold(_checking.c_str(), nullptr); }}
bool Parse_symbol (char _symb, const char* _Arr, int _size_arr) {
for (int i = 0; i <= _size_arr; i++)
if (_symb == _Arr[i]) return true;
return false; }
bool Parse_full_string (string _checking, int _offset, int _amount, bool _sec_cond, const char* _Arr, int _size_arr, bool _Drive) {
bool _parse_flag;
int _parse_count = 0;
for (int j = _offset; j < _amount; j++) {
if (Parse_symbol(_checking[j], _Arr, _size_arr)) {
_parse_count++;
if (_sec_cond) return false;
if (_Drive) {
if (_Call_Mantissa)
_sec_cond = (j == (_amount-1));
if (_parse_flag) return false;
_parse_flag = true;
if (_Call_Mantissa) {
_flag_mant = _parse_flag;
_position_mant = j;
}
}
}
}
if (!_Drive) {
if ((_amount - _offset) == _parse_count) return true;
else return false;
}
else return true;
}
bool Parse_the_first_symbol (string _checking) {
int LENGTH = _checking.length();
bool _parse_cond = (LENGTH < 2);
if (Parse_full_string (_checking, 0, 1, _parse_cond, _Arr_Sign, 1, SIGN))
return Parse_the_second_symbol (_checking);
else if (Parse_full_string (_checking, 0, 1, false, _Arr_Digit, 9, DIGIT))
return Control_result (0, _checking);
else return false; }
bool Parse_the_second_symbol (string _checking) {
if (Parse_full_string (_checking, 1, 2, false, _Arr_Digit, 9, DIGIT))
return Control_result (1, _checking);
else return false; }
bool Control_result (int i, string _checking) {
if (!Parse_mantissa (_checking)) return false;
else if (_flag_mant) {
string _before_mantissa = _checking.substr(0, _position_mant);
string _after_mantissa = _checking.substr(_position_mant + 1);
return (Parse_full_string_before_mantissa (i, _before_mantissa)
&& Parse_the_first_symbol_after_mantissa (_after_mantissa)); }
else return Parse_full_string_before_mantissa (i, _checking); }
bool Parse_mantissa (string _checking) {
int LENGTH = _checking.length();
_Call_Mantissa = true;
bool cash = Parse_full_string (_checking, 0, LENGTH, false, _Arr_Mantissa, 1, OTHER);
_Call_Mantissa = false;
return cash; }
bool Parse_full_string_before_mantissa (int i, string _checking) { // but the first symbol
int LENGTH = _checking.length();
return Parse_full_string (_checking, i, LENGTH, false, _Arr_Dot, 0, OTHER) &&
Parse_full_string (_checking, i, LENGTH, false, _Arr_Combo, 10, DIGIT); }
bool Parse_the_first_symbol_after_mantissa (string _checking) {
int LENGTH = _checking.length();
bool _parse_cond = (LENGTH < 2);
if ((Parse_full_string (_checking, 0, 1, _parse_cond, _Arr_Sign, 1, SIGN)) ||
(Parse_full_string (_checking, 0, 1, false, _Arr_Digit, 9, DIGIT)))
return Parse_full_string_after_mantissa (_checking);
else return false; }
bool Parse_full_string_after_mantissa (string _checking) {
int LENGTH = _checking.length();
return Parse_full_string (_checking, 1, LENGTH, false, _Arr_Digit, 9, DIGIT); }
Очередная говнопопытка оптимизации алгоритма.
+2
chek_LD(void)
{
LOCK_DETECT = read();
if (LOCK_DETECT == SAVE_LOCK_DETECT)
{
return;
}
if (LOCK_DETECT == 0)
{
LOCK_DETECT = read();
if (LOCK_DETECT == 0)
{
if (LOCK_DETECT != SAVE_LOCK_DETECT)
{
SAVE_LOCK_DETECT = 0;
}
}
}
else
{
delay_us(5);
LOCK_DETECT = read();
if (LOCK_DETECT == 1)
{
if (LOCK_DETECT != SAVE_LOCK_DETECT)
{
SAVE_LOCK_DETECT = 1;
}
}
}
return;
}
пришел на легаси проект. обожаю глобальные переменные на весь проект. еще больше обожаю логику)
0
#include <iostream>
#include <cmath>
#include <iomanip>
#include "govno.h"
using namespace std;
void prnt_msg_start() {
cout << endl << "Программа решения квадратного уравнения по формуле: ";
cout << "aX^2 + bX + c = 0" << endl;
cout << setprecision(69) << endl; }
long double ks[] = {1, 2, 1, 3, 10, 2};
class SqrtQual {
const string msg_not_roots = "Нет корней!\n",
msg_any_number = "X -- любое число.\n",
msg_special_event = "Решение частного случая (bX + c = 0):\n",
msg_discrim = "Дискриминант = ";
long double A, B, C, D, X1, X2;
bool flag_roots = true, flag_equal_zero, flag_special_event, flag_not_equal_zero,
flag_any_number, flag_input = true, flag_abs_roots, flag_cubes_roots;
void init_fields();
string answer();
bool to_decide();
void to_start();
public:
SqrtQual ();
SqrtQual (int z);
SqrtQual (long double a, long double b, long double c);
};
void variation_task(int variant) {
if (!variant) SqrtQual obj;
else {
for (int i = 0, j = 0; i < 2; i++, j += 3) {
if (variant < 2) SqrtQual obj(ks[j], ks[j+1], ks[j+2]);
else SqrtQual obj(i);
}
}
}
int main() {
prnt_msg_start();
for (int i = 1; i < 3; i++) variation_task(i);
}
SqrtQual::SqrtQual(int z) {
if (z) flag_abs_roots = true;
else flag_cubes_roots = true;
to_start(); }
SqrtQual::SqrtQual() {
to_start(); }
SqrtQual::SqrtQual(long double a, long double b, long double c) {
A = a;
B = b;
C = c;
flag_input = false;
to_start(); }
void SqrtQual::to_start() {
cout << endl;
if (flag_input) Govnokod l_obj(A, B, C);
init_fields();
cout << answer(); }
void SqrtQual::init_fields() {
flag_any_number = ((A == 0) && (B == 0) && (C == 0));
flag_not_equal_zero = ((A == 0) && (B == 0) && (C != 0));
flag_special_event = ((A == 0) && (B != 0) && (C != 0));
bool equal_zero_v1 = ((A == 0) && (B != 0) && (C == 0));
bool equal_zero_v2 = ((A != 0) && (B == 0) && (C == 0));
flag_equal_zero = equal_zero_v1 || equal_zero_v2;
D = B*B - 4*A*C;
if ((D < 0) || flag_not_equal_zero)
flag_roots = false; }
string SqrtQual::answer() {
string tmp = msg_discrim + to_string(D) + "\n";
if (flag_special_event)
tmp = msg_special_event + tmp;
if (flag_any_number)
return msg_any_number;
else if (not flag_roots)
return msg_not_roots;
else {
bool flag_args = to_decide();
string root1("X = "), root2("X2 = ");
if (flag_abs_roots) {
root1 = "| X | = ", root2 = "| X2 | = ";
X1 = abs(X1), X2 = abs(X2);
}
else if (flag_cubes_roots) {
root1 = "X ^3 = ", root2 = "X2 ^3 = ";
X1 = pow(X1, 3), X2 = pow(X2, 3);
}
tmp += root1 + to_string(X1) + "\n";
if (flag_args)
tmp += root2 + to_string(X2) + "\n";
}
return tmp;
}
bool SqrtQual::to_decide() /* if true then two roots else one root */ {
if (flag_equal_zero) X1 = 0;
else if (flag_special_event) X1 = (-C/B); // special event
else if (D == 0) X1 = (-B/2*A);
else {
X1 = ((-B + sqrt(D)) / 2*A), X2 = ((-B - sqrt(D)) / 2*A);
return true; }
return false; }
Немного расширил функционал говнокода с учётом замечаний (в том числе и по архитектуре).
0
#include <iostream>
#include <cmath>
#include "govno.h"
using namespace std;
class SqrtQual {
const string not_kor = "Нет корней!\n";
long double A;
long double B;
long double C;
long double D;
void vspomog();
void konez();
public:
void hello();
} obj;
int main() {
obj.hello();
}
void SqrtQual::hello() {
cout << "Программа решения квадратного уравнения по формуле: ";
cout << "aX^2 + bX + c = 0" << endl;
Govnokod obj;
A = obj.opros('a');
B = obj.opros('b');
C = obj.opros('c');
cout << endl;
konez();
}
void SqrtQual::vspomog() {
D = B*B - 4*A*C;
cout << "Дискриминант = " << D << endl;
if (D < 0)
cout << not_kor;
else if (D == 0)
cout << "X = " << (-B/(2*A));
else {
long double dsqrt = sqrt(D);
cout << "X1 = " << ((-B + dsqrt) / 2*A) << endl;
cout << "X2 = " << ((-B - dsqrt) / 2*A) << endl;
}
}
void SqrtQual::konez() {
bool any_digit = ((A == 0)
and (B == 0)
and (C == 0));
bool not_equal_zero = ((A == 0)
and (B == 0)
and (C != 0));
bool equal_zero_v1 = ((A == 0)
and (B != 0)
and (C == 0));
bool equal_zero_v2 = ((A != 0)
and (B == 0)
and (C == 0));
bool equal_zero = equal_zero_v1
or equal_zero_v2;
bool bx_plus_c = ((A == 0)
and (B != 0)
and (C != 0));
if (any_digit)
cout << "X -- любое число." << endl;
else if (not_equal_zero) {
cout << C << " != 0" << endl;
cout << not_kor;
}
else if (equal_zero)
cout << "X = 0" << endl;
else if (bx_plus_c) {
cout << "Решение частного случая (bX + c = 0):" << endl;
cout << "X = " << (-C/B) << endl;
}
else vspomog();
}
Попытался убрать лишнее из кода, возможно стало немного лучше, но это не точно...
+1
#include <iostream>
#include <cmath>
#include "govno.h"
using namespace std;
class SqrtQual {
const string not_kor = "Нет корней!\n";
struct ABC {
long double kA;
long double kB;
long double kC;
} gABC;
long double diskrim(long double a, long double b, long double c);
void diskrim_zero(long double a, long double b);
void diskrim_bolshe(long double a, long double b, long double d);
void vspomog();
void konez();
void m_bx_plus_c();
public:
void hello();
} obj;
int main() {
obj.hello();
}
void SqrtQual::hello() {
cout << "\nПрограмма вычисления корней квадратного уравнения по формуле: ";
cout << "aX^2 + bX + c = 0\n";
Govnokod obj;
gABC.kA = obj.opros('a');
gABC.kB = obj.opros('b');
gABC.kC = obj.opros('c');
cout << endl;
konez();
}
long double SqrtQual::diskrim(long double a, long double b, long double c) {
long double ac4 = 4*a*c;
long double bkv = pow(b, 2);
long double d = bkv - ac4;
cout << "Дискриминант = " << d << endl;
return d;
}
void SqrtQual::diskrim_zero(long double a, long double b) {
if (a == 0)
cout << not_kor;
else {
long double x = -b/(2*a);
cout << "X = " << x;
}
}
void SqrtQual::diskrim_bolshe(long double a, long double b, long double d) {
if (a == 0)
cout << not_kor;
else {
long double dsqrt = sqrt(d);
long double a2 = a * 2;
long double x1 = (-b + dsqrt) / a2;
long double x2 = (-b - dsqrt) / a2;
cout << "X1 = " << x1 << endl;
cout << "X2 = " << x2 << endl;
}
}
void SqrtQual::m_bx_plus_c() {
long double x = -gABC.kC/gABC.kB;
cout << "X = " << x << endl;
}
void SqrtQual::vspomog() {
long double D = diskrim(gABC.kA, gABC.kB, gABC.kC);
if (D < 0)
cout << not_kor;
else if (D == 0)
diskrim_zero(gABC.kA, gABC.kB);
else
diskrim_bolshe(gABC.kA, gABC.kB, D);
}
void SqrtQual::konez() {
bool any_digit = ((gABC.kA == 0) and
(gABC.kB == 0) and
(gABC.kC == 0));
bool not_equal_zero = ((gABC.kA == 0) and
(gABC.kB == 0) and
(gABC.kC != 0));
bool equal_zero_v1 = ((gABC.kA == 0) and
(gABC.kB != 0) and
(gABC.kC == 0));
bool equal_zero_v2 = ((gABC.kA != 0) and
(gABC.kB == 0) and
(gABC.kC == 0));
bool equal_zero = equal_zero_v1 or equal_zero_v2;
bool bx_plus_c = ((gABC.kA == 0) and (gABC.kB != 0));
if (any_digit)
cout << "X -- любое число.";
else if (not_equal_zero) {
cout << gABC.kC << " -- Не равно нулю!";
cout << not_kor; }
else if (equal_zero)
cout << "X = 0";
else if (bx_plus_c)
m_bx_plus_c();
else vspomog();
}
Вот для этой проги я писал предыдущие говнокоды. Тут нет решений для множества комплексных чисел пока что.
0
#include <iostream>
#include <string>
using namespace std;
class Govnokod {
bool _flag_dot;
bool _flag_mant;
int _index_mant;
bool vetka1(int i, const string stroka) {
for (int j = i++; j < stroka.length(); j++) {
switch (stroka[j]) {
case '.':
if (_flag_dot) return false;
_flag_dot = true;
break;
case '0' ... '9': break;
default:
return false;
break; }}
return true;}
bool vetka2_dalshe(const string stroka) {
for (int j = 1; j < stroka.length(); j++) {
switch (stroka[j]) {
case '0' ... '9': break;
default:
return false;
break; }}
return true; }
bool vetka2(const string stroka) {
switch (stroka[0]) {
case '+':
case '-':
if (stroka.length() < 2) return false;
return vetka2_dalshe(stroka);
break;
case '0' ... '9':
return vetka2_dalshe(stroka);
break;
default:
return false;
break; }}
bool mantissa(const string stroka) {
for (int j = 0; j < stroka.length(); j++) {
switch (stroka[j]) {
case 'e':
case 'E':
if ((_flag_mant) or (j == (stroka.length() - 1))) return false;
_flag_mant = true;
_index_mant = j;
break; }}
return true; }
bool Dalshe(int i, const string stroka) {
_flag_dot = false;
_flag_mant = false;
if (not mantissa(stroka)) return false;
else if (_flag_mant) {
string sub1 = stroka.substr(0, _index_mant);
string sub2 = stroka.substr(_index_mant+1);
return (vetka1(i, sub1) and vetka2(sub2)); }
else return vetka1(i, stroka); }
bool proverka(const string stroka) {
switch (stroka[1]) {
case '0' ... '9':
return Dalshe(1, stroka); break;
default: return false; break; }}
bool general_proverka(const string stroka) {
if (stroka.length() == 0) return false;
switch (stroka[0]) {
case '-':
case '+':
if (stroka.length() > 1) return proverka(stroka);
else return false;
break;
case '0' ... '9':
return Dalshe(0, stroka);
break;
default: return false; break; }}
string cut_incorrect_symbol(const string stroka) {
int j, i;
string buf;
for (j = 0, i = 0; j < stroka.length(); j++) {
switch (stroka[j]) {
case '0' ... '9':
case '-':
case '+':
case '.':
case 'e':
case 'E':
buf.push_back(stroka[j]);
break;
default: i++; break; }}
return buf; }
public:
long double opros(char s) {
string argument;
while (true) {
cout << "Введите значение " << s << ": ";
getline(cin, argument);
if (argument.length() == 0) cout << "Вы не ввели значение!" << endl;
else if (not general_proverka(cut_incorrect_symbol(argument))) cout << "Некорректное значение!" << endl;
else return strtold(argument.c_str(), nullptr); }}};
Модифицированная версия говнокода проверки строки на корректность соответствия символов типу long double: изначально вырезаются все левые символы. А вообще этот модуль "govno.h", я написал для основной проги для решения квадратного уравнения.
0
#include <iostream>
#include <string>
using namespace std;
class Govnokod {
bool _flag_dot;
bool _flag_mant;
int _index_mant;
bool vetka1(int i, const string stroka) {
for (int j = i++; j < stroka.length(); j++) {
switch (stroka[j]) {
case '.':
if (_flag_dot) return false;
_flag_dot = true;
break;
case '0' ... '9': break;
default:
return false;
break; }}
return true;}
bool vetka2_dalshe(const string stroka) {
for (int j = 1; j < stroka.length(); j++) {
switch (stroka[j]) {
case '0' ... '9': break;
default:
return false;
break; }}
return true; }
bool vetka2(const string stroka) {
switch (stroka[0]) {
case '+':
case '-':
if (stroka.length() < 2) return false;
return vetka2_dalshe(stroka);
break;
case '0' ... '9':
return vetka2_dalshe(stroka);
break;
default:
return false;
break; }}
bool mantissa(const string stroka) {
for (int j = 0; j < stroka.length(); j++) {
switch (stroka[j]) {
case 'e':
case 'E':
if ((_flag_mant) or (j == (stroka.length() - 1))) return false;
_flag_mant = true;
_index_mant = j;
break; }}
return true; }
bool Dalshe(int i, const string stroka) {
_flag_dot = false;
_flag_mant = false;
if (not mantissa(stroka)) return false;
else if (_flag_mant) {
string sub1 = stroka.substr(0, _index_mant);
string sub2 = stroka.substr(_index_mant+1);
return (vetka1(i, sub1) and vetka2(sub2)); }
else return vetka1(i, stroka); }
bool proverka(const string stroka) {
switch (stroka[1]) {
case '0' ... '9':
return Dalshe(1, stroka);
break;
default:
return false;
break; }}
bool general_proverka(const string stroka) {
switch (stroka[0]) {
case '-':
case '+':
if (stroka.length() > 1) return proverka(stroka);
else return false;
break;
case '0' ... '9':
return Dalshe(0, stroka);
break;
default:
return false;
break; }}
public:
long double opros(char s) {
string argument;
while (true) {
cout << "Введите значение " << s << ": ";
getline(cin, argument);
if (argument.length() == 0)
cout << "Вы не ввели значение!" << endl;
else if (not general_proverka(argument))
cout << "Некорректное значение!" << endl;
else
return strtold(argument.c_str(), nullptr); }
}
} obj;
int main() {
for (char c = 'a'; c < 'd'; c++) {
long double result = obj.opros(c);
cout << "Значение: " << result << " -- корректное!" << endl;
}
}
Решил попробовать в стиле ООП переписать.
+1
let array = [-2, 4, -10, 8];
let count = 0;
for (let i = 0; i < array.length; i++) {
if (!String(array[i]).startsWith("-")) {
count += array[i]
}
}
console.log(count) // 12
Пробовался в speed'кодинге, получил задачу: "написать код для нахождения суммы всех положительных элементов массива", ну и наскоро получилось такое xD