Давайте знакомиться с программированием

Главная / Давайте знакомиться с программированием

Программирование — процесс создания компьютерных программ с помощью языков программирования, реализация одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования.

Язык программирования — формальная знаковая система, предназначенная для описания алгоритмов в форме программы, которая удобна для исполнителя (например, компьютера).
Языки программирования делятся на

Машинно-независимые языки позволяют быстро писать довольно сложные программы.

Машинно-зависимые языки применяются в тех случаях, когда необходимо построить наиболее компактный машинный код и создать самые быстродействующие программы. Они оперируют непосредственно ячейками памяти и программно-доступными элементами микропроцессора.

Алгоритмизация — процесс систематического составления алгоритмов для решения поставленных прикладных задач.

Алгоритм — точный набор инструкций, описывающих порядок действий некоторого исполнителя для достижения результата, решения некоторой задачи за конечное число шагов. Основные свойства алгоритмов:

  • Понятность для исполнителя — исполнитель алгоритма должен понимать, как его выполнять. Иными словами, имея алгоритм и произвольный вариант исходных данных, исполнитель должен знать, как надо действовать для выполнения этого алгоритма.
  • Дискретность (прерывность, раздельность) — алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов (этапов).
  • Определенность — каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
  • Результативность (или конечность) состоит в том, что за конечное число шагов алгоритм либо должен приводить к решению задачи, либо после конечного числа шагов останавливаться из-за невозможности получить решение с выдачей соответствующего сообщения, либо неограниченно продолжаться в течение времени, отведенного для исполнения алгоритма, с выдачей промежуточных результатов.
  • Массовость означает, что алгоритм решения задачи разрабатывается в общем виде, т.е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.

Парадигма программирования — это система идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.

Существующие парадигмы программирования:

  • императивное программирование – описывает процесс вычисления в виде инструкций, изменяющих состояние программы;
  • декларативное программирование – программа генерируется по ее описанию (HTML-страница);
  • структурное программирование – представление программы в виде иерархической структуры блоков;
  • функциональное программирование – заключается в выполнении ряда функций;
  • объектно-ориентированное программирование – основными концепциями являются понятия объектов и классов.

Комментариев к записи: 54

  • Здравствуйте! Раньше писал на ассемблере под дос, потом когда дошел до винды, застрял. Сейчас решил поучить паскаль, в планах разобрать что сейчас в школах проходят. Писал за деньги студентам работы на асме, вот вопрос зачем в институте проходят ассемблер для дос, если эта система не используется? Как думаете стоит писать на асме под винду? С нуля, с чего начать си или си шарп, си ++ ? Спасибо. Удачи вам, здоровья!

    • На асме под Винду, на мой взгляд, писать можно, но не нужно. По крайней мере, мне не приходилось в реальности сталкиваться с задачами, которые без asm не написать. Может быть, кто-то меня поправит. Сама я для windows приложений предпочитаю использовать C#. Но, поскольку большую часть времени программирую для микроконтроллеров, без Си и C++ не обойтись.

  • Добрый вечер) Елена, можно ли задать Вам вопрос? Вот например, есть задание: "Написать программу, которая считывает текст с консоли и выводит на экран, только предложения содержащее введенное слово с клавиатуры". Вот, что у меня вышло:
    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
    #include <iostream> 
    #include<stdio.h>
    #include<math.h>
    #include <string>
    #include<ctype.h>
    #include<conio.h>
    #include<Windows.h>
    using namespace std;


    int main(int args, char* argv[])
    {

        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        char s1[1000]="", s2[20]="", predlojeniya[1000][1000];
        int k = 0, i, j = 0, v = 0;
        cout << "Введите строку, содержащую предложения:\n";
        gets_s(s1);
        cout << "Введите искомое слово: ";
        gets_s(s2);
        k = 0;
        for (i = 0; i < strlen(s1); i++)
            if (*(s1 + i) == '.')
            {
                strncpy_s(*(predlojeniya + j), s1 + k, i - k);
                *(*(predlojeniya + j) + (i - k)) = 0;
                i++;
                k = i;
                j++;
            }
        strncpy_s(*(predlojeniya + j), s1 + k, i - k);
        *(*(predlojeniya + j) + (i - k)) = 0;
        for (j = 0; j < strlen(*(predlojeniya + j)); j++)
        {
            if (!strstr(*(predlojeniya + j), s2));
            else
                cout << *(predlojeniya + j) << "\n";
        }
        _getch();
    }
    Все работает, но если в тексте есть предложение, содержащее введенное слово, но только с Большой буквы, то оно его не находит.. И ещё вопрос, если можно) Как сделать например считывания текста из файла, а не с консоли? Спасибо Вам!

    • 1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      char slovo[20] = { 0 };
        for (int i = 0; i <= strlen(s2); i++)
        {
          slovo[i] = toupper(s2[i]);
        }
        slovo[strlen(s2) + 1] = 0;
        for (j = 0; j < strlen(*(predlojeniya + j)); j++)
        {
          char pred[1000] = { 0 };
          for (int i = 0; i <= strlen(*(predlojeniya + j)); i++)
          {
            pred[i] = toupper((*(predlojeniya + j))[i]);
          }
          pred[strlen((*(predlojeniya + j))) + 1] = 0;
          if (strstr(pred, slovo))
            cout << *(predlojeniya + j) << "\n";
        }
      Переводим слово и предложения к одному регистру (верхнему или нижнему), и затем ищем слово. Про ввод из файла смотрите здесь: https://prog-cpp.ru/cpp-files/

  • Может кто подсказать, почему следующий код в последнем printf выводит "-115"?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>

    int cube(input);

    int main(void)
    {
         int x = 2;
         char y = '5';
         printf("x is %i\n", x);
         printf("y is %i\n", y);
         x = cube(x);
         y = cube(y);
         printf("x cube is %i\n", x);
         printf("y cube is %i\n", y);
    }

    int cube(input)
    {
         int output = input * input * input;
         return output;
    }
    Не понимаю откуда берется это число, ещё и отрицательное.

    • y занимает 1 байт со знаком, то есть значение от -128 до +127. Изначально y='5'=53 (ASCII код символа 5). Мы возводим 53 в куб, но помним про переполнение разрядной сетки. 53*53=2809. В разрядной сетке останется -7, т.к. 2809 - 2560 = 249, для размещения в разрядной сетке это 256-249=-7. Ещё раз умножаем на 53 -7*53=-371. В разрядную сетку войдёт -371+256=-115. Вот оно и выводится!

      • Большое Вам спасибо! Много нового узнал подробнее разобравшись в этом

  • Здравствуйте, помогите решить задачу, переведу на русский - На языке С++ В файле INPUT.TXT в первой строке записано N (0 <N <= 100) - число холмов. Дальше идет матрица смежности , что описывает наличие мостов между холмами (1-міст є, 0-немає). В последней строке записано N чисел, что означают цвет холмов: 1 - красный; 2 - синий; 3 - зеленый. Формат исходных данных У файл OUTPUT.TXT вывести количество "плохих" мостов. приклад input.txt output.txt 4 7 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1 1 1 3 3

    • Не до конца понимаю условие задачи. Что за плохие мосты? Почему в матрице 14 единиц, а в последней строке 7 чисел? Как связаны эти числа с матрицей?

  • Помогите понять, что не так? Найти приближенное значение функции cos в точке Х при N > 0 *это последовательность 1 – Х 2 /2! + Х4 /4! –.. программа
    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
    #include <stdio.h>
    #include <math.h>
    #include <locale.h>
    int arctg(int n,int x)
    {
     int i,k=1,f=1,c=1;
     float s=1,a;
     for (i=1;i<n;i++)
     {
    f=f*(2*i-2);
    k=k*pow(x,(2*i-2));
    a=1.*k/f;
    if (i%2==1 && i!=1)
    {
    c=-1*c;
    s=s+c*a;
    printf("s(pri N=%d)= %f a= %f f= %d k= %d\n",i,s,a,f,k);
    }
     }
     printf("s = %3.f\n",s);
     return(s);
    }
    int main()
    {
      int n;
      int x;
    printf("enter N and x\n");
    scanf("%d%d",&n,&x);
    arctg(n,x);
    getchar();
    }

    • 1
      2
      3
      4
      f=f*(2*i)*(2*i-1);
      k=k*pow(x,(2*i));
      c=c*(-1);
      a=(float)c*k/f;

  • А какие библиотеки надо подключать к С, чтобы осуществить передачу звуковых пакетов через интернет?Там специальные функции были Когда-то делала такое по образцу текста программы из MSDN, теперь плохо помню Помню, что было подключение к устройству и передача пакета с анализом каким-то по байтам зачем-то Вообще нужны образцы программ на С работы с интернетом-передача данных всяких, например Где взять?

  • Автор максимально разжевал понятия программирования , направление , и характеристику, молодец. Добавить есть что конечно, кому нужно программирование ? Ответ прост разработчикам сайтов (веб-мастерам) , программы создавать и руководить машинами , весь мир руководится правилом кода, и тут уже выбор и направление зависит от цели которую нужно выполнить !

  • Здравствуйте. Огромное спасибо за Ваш труд! Сайт очень помогает в освоении языка, все очень наглядно и доступно написано.

  • Прекраснейший сайт!Спасибо Уважаемая Елена!Ваши таланты и отзывчивость делают этот мир лучше и интереснее.Успехов Вам во всех Ваших начинаниях.С уважением,Михаил.

  • Здравствуйте! Интерисует один вопрос, собственно, возможна-ли повторное сохранения ( разних) значений в один файл с помощью ifstream, ofstream? Если да, подскажите пожалуйста как. Для уточнение, имея только две переменные (и не больше!). Установлен цикл while и мне нужно, чтобы после окончания первой стадии цикла сохранялось одно значение, а после второй стадии - другое значение.

    • Насколько я понимаю, если речь идёт о сохранении значений, то это только вывод в файл. Чтобы ответить, хотелось бы ознакомиться с кодом

      • По-моему, код немножко больше, чем кажется, но, вот
        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
        154
        155
        156
        157
        158
        159
        160
        161
        162
        163
        164
        165
        166
        167
        168
        169
        170
        171
        172
        173
        174
        175
        176
        177
        178
        179
        180
        181
        182
        183
        184
        185
        186
        187
        188
        189
        190
        191
        192
        193
        194
        195
        196
        197
        198
        199
        200
        201
        202
        203
        204
        205
        206
        207
        208
        209
        210
        211
        212
        213
        214
        215
        216
        217
        218
        219
        220
        221
        222
        223
        224
        225
        226
        227
        228
        229
        230
        231
        232
        233
        234
        235
        236
        237
        238
        239
        240
        241
        242
        243
        244
        245
        246
        247
        248
        249
        250
        251
        252
        253
        254
        255
        256
        257
        258
        259
        260
        261
        262
        263
        264
        265
        266
        267
        268
        269
        270
        271
        272
        273
        274
        275
        276
        277
        278
        279
        280
        281
        282
        283
        284
        285
        286
        287
        288
        289
        290
        291
        292
        293
        294
        295
        296
        297
        298
        299
        300
        301
        302
        303
        304
        305
        306
        307
        308
        309
        310
        311
        312
        313
        314
        315
        316
        317
        318
        319
        320
        321
        322
        323
        324
        325
        326
        327
        328
        329
        330
        331
        332
        333
        334
        335
        336
        337
        338
        339
        340
        341
        342
        343
        344
        345
        346
        347
        348
        349
        350
        351
        352
        353
        354
        355
        356
        357
        358
        359
        360
        361
        362
        363
        364
        365
        366
        367
        368
        369
        370
        371
        372
        373
        374
        375
        376
        377
        378
        379
        380
        381
        382
        383
        384
        385
        386
        387
        388
        389
        390
        391
        392
        393
        394
        395
        396
        397
        398
        399
        400
        401
        402
        403
        404
        405
        406
        407
        408
        409
        410
        411
        412
        413
        414
        415
        416
        417
        418
        419
        420
        #include <iostream>
        #include <time.h>
        #include <cstdlib>
        #include <stdlib.h>
        #include <fstream>
        #include <windows.h>
        #include <conio.h>
        #include <iomanip>
        using namespace std;
        const int size = 9;
        const int ships = 2;
        const int hits = 2;
        class Player
        {
        protected:
          bool map1[size][size];
          char map2[size][size];
        public:
          void set_map2(int x, int y, char c)
          {
            map2[x][y] = c;
          }
          char get_map2(int x, int y)
          {
            return map2[x][y];
          }
          char get_map1(int x, int y)
          {
            return map1[x][y];
          }
          void set_map1(int x, int y, char c)
          {
            map1[x][y] = c;
          }
          virtual void insert() = 0;  
        };

        class Computer:public Player
        {
        public:
          void newcomp()
          {
            for (int i = 0; i < size; i++)
            {
              for (int p = 0; p < size; p ++)
              {
                map1[i][p] = 0;
                map2[i][p] = ' ';
              }
            }
          }
          void insert()
          {
            srand (time(NULL));
            int x, y;
            for (int i = 0; i < ships; i ++)
            {
              x = rand()% size;
              y = rand()% size; 
              if (map1[x][y])
              {
                i--;
              }else (map1[x][y] = 1);
            }  
          }
        };

        class Human:public Player
        {
        public:
          void newhuman()
          {
            for (int i = 0; i < size; i ++)
            {
              for (int p = 0; p < size; p ++)
              {
                map1[i][p] = 0;
                map2[i][p] = ' ';
              }
            }
          }
          void SetColor(int text, int background)
          {
             HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
            SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
          }
          void insert()
          {
            
            int x, y;
            for (int i = 0; i < ships; i ++)
            {
              system("cls");
              SetColor(11,8);
              cout << "P";
              SetColor(15,0);
              cout << ' ';
              for (int p = 0; p < size; p++)
                cout << p << ' ';
              cout << endl;
              for (int s = 0; s < size; s++)
                {
                  cout << s << ' ';
                  for (int m = 0; m < size; m++)
                  {
                    SetColor(15,3);
                    cout << map1[s][m] << ' ';
                    SetColor(15,0);
                  }  
                  cout << endl;        
                }
              SetColor(11,8);
              cout << endl << "Input X &  Y :  ";
              SetColor(15, 0);
              x = _getch() - 48;
              cout << x << "  "
              y = _getch() - 48;
              cout << y << "  " << endl;
              if (map1[x][y] || x < 0 || y < 0 || x >= size || y >= size) // || - или
              {
                i --;
              }else (map1[x][y] = 1);
            }
            cout << endl;
          }
        };

        class Game
        {
        private:
          Human human;
          Computer computer;
        public:
          Game()
          {
            menu();
          }
          void menu()
          {
          SetColor(12, 0);
          cout << "\n  BATTLE";
          SetColor(15, 0);
          SetColor(11, 0);
          cout << "   SHIP" << endl;
          SetColor(15, 0);
          cout << "          by Kram" << endl << endl;
          SetColor(12, 11);
          cout << "1";
          SetColor(15, 0);
          cout << "  ";
          SetColor(12, 0);
          cout << "New ";
          SetColor(15, 0);
          SetColor(11, 0);
          cout << " Game" << endl << endl;
          SetColor(15, 0);
          SetColor(12, 11);
          cout << "2";
          SetColor(15, 0);
          cout << "  ";
          SetColor(10, 0);
          cout << "History" << endl << endl;
          SetColor(15, 0);
          SetColor(12, 11);
          cout << "3";
          SetColor(15, 0);
          cout << "  ";
          SetColor(13, 0);
          cout << "Rules" << endl << endl;
          SetColor(15, 0);
          SetColor(12, 11);
          cout << "4";
          SetColor(15, 0);
          cout << "  ";
          SetColor(14, 0);
          cout << "Exit" << endl << endl;
          SetColor(15, 0);
          SetColor(11, 0);
          cout << "---";
          SetColor(15, 0);
          SetColor(15, 0);
          cout << "Press the number from 1 to 3, to load the option";
          SetColor(15,0);
          SetColor(11, 0);
          cout << "---" << endl;
          SetColor(15, 0);
          int a;
          int b;
          a = _getch() - 48;
          if (a == 1)
          {
            newgame();
            showmap();
            for (int i = 0; i < hits; i++)
            {
             hit();
             showmap();  
            }
            score();
          }else if(a == 2)
          {  
            system("cls");
            cout << "\n History of Wars\n\n";
            cout << "\n Press 1 to Back";
            b = _getch()- 48;
            if (b == 1)
            {
              system("cls");
              menu();
             
            }
            
          }else if(a == 4)
          {

            SetColor(11, 8);
            cout << endl << "Exit! Okay! Bye!"
            SetColor(15, 0);
            Sleep(2000);
            exit(0);
          }else if(a == 3)
          {
            system("cls");
            SetColor(13,0);
            cout << "\n\n\t Rules of War\n\n\n\n";
            SetColor(15,0);
            SetColor(13,7);
            cout << "---Slowly and unhurriedly enter the coordinates of the ships, it can crash the game.\n\n" 
            << "---When loading and calculating the result of the battle, do not press the keys under any circumstances,\nit can crash the game.\n\n"
            << "---Do not change the game code, this may break the structure and can crash the game.\n\n"
            << "---Do not set values for items that are not in the menu, this can crash the game.\n\n";
            SetColor(15,0);
            b = _getch()- 48;
            if (b == 1)
            {
              system("cls");
              menu();
             
            }
            while (true){
            SetColor(0,0);
            cout << "\n Press 1 to Back";
            SetColor(0,0);
            Sleep (5000);
            SetColor(15,0);
            cout << "\n Press 1 to Back";
            SetColor(15,0);
            }
          }
          
          }
          void SetColor(int text, int background)
          {
             HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
            SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text)); // цвет текста
          }
          void animation()
          {
            SetColor (11, 8);
            for (int p = 0; p < 4 * size + 8; p++)
            {
              Sleep(80);
              cout << '|';
            }
            SetColor(15, 0);
          }
          void score()
          {
          int player = 0;
          int comp = 0;

          for (int p = 0; p < size; p++)
          {
            for (int i = 0; i < size; i++)
            {
              if (computer.get_map2(p,i) == 'X' )
              {
                player ++;
              }
              if (human.get_map2(p,i) == 'X')
              {
                comp ++;
              }
            }
          }
          cout << endl;
          animation();
          SetColor(11, 0);
          cout << endl << left << "P : " << player;
          SetColor(15, 0);
          SetColor(12, 0);
          cout << right << setw(3.7*size+2) << comp << " : C" << endl;  
          SetColor(15, 0);
          if (player > comp)
          {
            SetColor(11, 0);
            cout << right << setw(5.5*size/2 ) <<  "You Win!";
            SetColor(15, 0);
          }else if (player == comp)
          {
            SetColor(10, 0);
            cout << right << setw(5.5*size/2) << "Draw!";
            SetColor(15, 0);
          }else
          {
            SetColor(12, 0);
            cout << right << setw(5.5*size/2) << "You Lose!" << endl << endl << endl;
            SetColor(15, 0);
          }
          ofstream istory;
          istory.open("battleships.txt");
          istory << "P:" <<  player << "  " <<  comp << ":C" << endl;
          istory.close();
          }
          void showmap()
          {
          system ("cls");
          SetColor(11,8);
          cout << "P";
          SetColor(15,0);
          cout << ' ';
          for (int p = 0; p < size; p++)
          {
            cout << p << ' ';  
          }
          cout << "\t";
          SetColor(12,8);
          cout << "C";
          SetColor(15,0);
          cout << ' ';
            for (int p = 0; p < size; p++)
            {
              cout << p << ' ';
            }
            cout << endl;
            for (int i = 0; i < size; i++)
            {
              cout << i << ' ';
              for (int j = 0; j < size; j++)
              {
                SetColor(15,3);
                cout << human.get_map2(i,j) << " ";
                SetColor(15,0);
              }
              cout << "\t";
              cout << i << ' ';
              for (int j = 0; j < size; j++)
              {
                SetColor(15,3);
                cout << computer.get_map2(i,j) << " ";
                SetColor(15,0);
              }
              cout << endl;
            }
          }
          void hit()
          {
            int x, y;
            srand(time (NULL));
            do
             {
              cout << " Input cordinates for attack: ";
              x = _getch() - 48;
                cout << x << "  ";
              y = _getch() - 48;
              cout << y << endl;
              if(computer.get_map2(x,y) != ' ')
              {
                cout << " Check your last cordinates!" << endl;
              }
             }while (computer.get_map2(x, y) != ' ');
               if (computer.get_map1(x,y) != 0)
               {
                 computer.set_map2(x,y,'X');
               }else
               computer.set_map2(x,y,'O');
               }
            do
            {
              x = rand() % size;
                cout << x << "  ";
              y = rand() % size;
                cout << y << endl;
              if(human.get_map2(x,y) != ' ')
              {
               cout << x << "  ";
               cout << y << endl;
              }
            
            }while (human.get_map2(x,y) != ' ');
              if (human.get_map1(x,y) != 0)
              {
                human.set_map2(x, y, 'X');
              }else{
              human.set_map2(x, y, 'O');
              }
          }

          void newgame()
          {
            SetColor(15, 0);
            human.newhuman();
            computer.newcomp();
            human.insert();
            computer.insert();
          }
          
        };

        int main()
        {
          while(true)
          {
          Game game;
          Sleep(5000);
          system("cls");
          }
          
          return 0;
        }
        В методе score(), мне нужно постоянно сохранять значение, а не только одно, так как сама программа имеет зацикленное тело.

        • Удивительно, но с отспутом, в панеле ответа, не очень

        • Насколько я поняла, переменные player и comp в функции score должны сохранять свое значение. Это можно сделать, объявив их статическими или глобальными.

  • Дмитрий
    "Язык программирования — формальная знаковая система, предназначенная..." Справедливо, например, для Бейсик-системы, Форт-системы. Для Си, Паскаля, ... системы выстраивает методология программирования, то есть она решает проблемы. Я бы написал "формальная грамматика".

  • Здравствуйте, можете помочь написать программу для C++: Нужно в файле создать словарь (World Мир, Hello Привет, как то так написать в текстовом документе), потом в программе с помощью vector, как я понял, сделать так чтобы при вводе слова (Hello) выводился перевод (Привет), и работала так же наоборот (т.е. грубо говоря англо-русский, русско-английский словарь), в STL библиотеке я полный ноль, буду рад любой помощи

    • Любая помощь предполагает ответы на конкретные вопросы, когда что-то работает не так, как хотелось. Составлением программ за студентов я не занимаюсь.

  • Добрый день и спасибо за учение! Подскажите, эти две команды они делают одно и тоже? (Как я понял, создается массив символов с именем s.)
    1
    2
    char *s="Папа Тима"//вариант 1
    char s[] = "Папа Тима"//вариант 2
    Я не могу понять 1 вариант все таки. Если создается указатель s - этот указатель должен содержать адрес участка памяти другой переменной (или имя массива), в котором уже будут данные.. Так ведь? А тут получается, что имя указателя s и имя массива это одно и то же. И почему тогда компилятор выдает ошибку, когда я пытаюсь по такой же аналогии сделать заполнение типа int
    1
    2
    3
    int *n=500; // компилятор выдает ошибку!
    char *s="Папа Тима"// а здесь почему то нет ошибки, хотя аналогия
    // точно такая же, просто другой тип не char, а int.

    • При задании строки сначала создаётся массив символов, а потом начальный адрес этого массива присваивается указателю. Вариант 1 и вариант 2 различаются лишь тем, что во втором случае используется константный указатель, который нельзя переставить на начало другой строки.
      1
      int *n=500; // компилятор выдает ошибку!
      В этом случае не выделена область памяти, в которой лежит число 500, поэтому и ошибка.

      • Спасибо за быстрый ответ! Я поражен Вашими знаниями! Объясните, пожалуйста, почему в варианте со строковым массивом, этот массив _сначала_ создается где то в памяти и уже потом его адрес присваивается указателю, а в варианте с int, значение 500 _сначала_ не создается где то в памяти, а _сразу_ пытается присвоить указателю несуществующее значение адреса? Получается что конструкция char *s="Какая то строка"; работает ТОЛЬКО для массивов типа char? Так? Получается тип char какой то особенный в СИ? Или в чем загвоздка все таки?

        • Особенный не тип char, а особенное создание строки, заключённой в двойные кавычки. С числом такой фокус не получится, потому что если число заключить в двойные кавычки, то получится строка.

          • Ах, вот оказывается в чем дело! А я то ломал голову! Теперь это ясно! Спасибо!

  • Я согласен со вторым, в широком смысле. А в узком смысле, на мой взгляд, лучше избегать неочевидного поведения, в программировании и без этого полно подводных камней. Я ж тоже не говорю, что низзя-низзя перегружать присваивание вообще никогда и ни за что. Только то, что "я

  • Елена, я на Ubuntu учусь программировать на Си. Вобщем дело в том что без отладчика никуда, а про отладчик gdb ничего систематезированного нету ни книг, ни статей, ни видео на ютубе. Вы не планируете его разбирать в своих статьях?) Я кстати слежу за вашим сайтом, разбираю примеры, алгоритмизации, задачи) все очень классно)


    • Ув. Андрей! Если Вы будете пользоваться отладчиками при изучении языка, Вы никогда не сможете сами найти ошибки в своей программе и никогда не научитесь писать "красивые" программы.

      • Роман Алексеевич
        Странное суждение. Почему вы так думаете? Хотя сам занимаюсь программированием давно, отладчиками не пользуюсь. Использую диагностический код и вывод прямо из программы. О чем периодически себя кусаю, ведь вроде бы отладчик позволяет добиться тех же результатов, но гораздо быстрее и без усложнения основной программы. Какие аргументы против отладчиков есть у Вас? Какие аргументы за отладку прямо из кода?

  • Огромное спасибо за ваш сайт. Решил освежить знания по алгоритмам сортировки. Хотя много лет не писал на C++, сейчас я программирую на Golang но все очень понятно и структурировано. Однозначно в закладки!

  • Алексей
    Здравствуйте, помогите пожалуйста с листингом, мне нужно обеспечить приём от пользователя три строки, (первая и третья строки – это правильные рациональные или десятичные дроби вида «1/3» или «0,5», вторая строка – это знак арифметической операции вида «+», «-», «*», «/» либо операции сравнения «<», «>», «=», «!=», «>=», «<=»),далее программа должна выполнять требуемую операцию над полученными операндами, и выводить результат на экран.Также должно обеспечиваться сокращение дроби при необходимости. Если оба операнда арифметической операции являются рациональными дробями, результатом тоже должна быть рациональная дробь. Вот такое задание у меня, а вот на чём я завис:
    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
    #include <iostream>
    #include <Windows.h>
    #include <locale>

    using namespace std;

    int main()
    {
        setlocale(LC_ALL, "");
        SetConsoleOutputCP(1251);
        int c = 0;
        float a,b,d;
        cout<<"Введите первый аргумент: ";
        cin>>a;
        cout<<"Введите действие(1-'+',2-'-',3-'*',4-'/',5-'<',6-'>',7-'='): ";
        cin>>c;
        cout<<"Введите второй аргумент: ";
        cin>>b;
        switch (c)
        {
        case 1:
            {
                d = a + b;
                cout<<"Результат="<<d<< endl;
                break;
            }
        case 2:
            {
                d = a - b;
                cout<<"Результат="<<d<< endl;
                break;
            }
        case 3:
            {
                d = a * b;
                cout<<"Результат="<<d<< endl;
                break;
            }
        case 4:
            {
                d = a / b;
                cout<<"Результат="<<d<< endl;
                break;
            }
        case 5:
            {
                if(a<b)
                    cout<<"Истина:"<<a<<"<"<<b<< endl;
                else
                    cout<<"Ложь:"<<a<<">"<<b<< endl;
                break;
            }
        case 6:
            {
                if(a>b)
                    cout<<"Истина:"<<a<<">"<<b<< endl;
                else
                    cout<<"Ложь:"<<a<<"<"<<b<< endl;
                break;
            }
        case 7:
            {
                if(a!=b)
                    cout<<"Ложь:"<<a<<"!="<<b<< endl;
                else
                    cout<<"Истина:"<<a<<"="<<b<< endl;
                break;
            }
        }
        return 0;
    }

    • Считывать операнды надо как строку и анализировать, есть ли в ней дробь.

  • Здравствуйте Елена, в поисках последовательного и внятного изложения материалов о программировании на Си, набрел на ваш сайт. Вся каша в голове из кусков и отрывков найденных на просторах интернета начала приобретать смысл после ознакомления с материалами сайта. Так же радует, что вы отвечаете на все вопросы пользователей вашего сайта. Может и мне поможете. Разбирая в учебных целях программу на Си столкнулся с непонятным мне началом программы. Гугл не смог мне объяснить, что это за функция. void recoding(void) { }

    • Это какая-то пользовательская функция, которая не принимает никаких данных, не возвращает никакого значения и ничего пока не делает.

      • Спасибо, значит в стандартных библиотеках такой функции нет. А где на вашем сайте можно прочитать про перекодировки переменных и для чего это нужно. Ну то есть я тупо перевел слово "recoding", или меня понесло не в ту степь.

      • Кажется понял,прочитал раздел "Функция". Это значит какой то товарищ написал кусок кода на Си, поместил этот код в тело функции, которую обозвал "recoding"
        1
        2
        3
        4
        5
        6
        7
        void recoding(void) {

         digit_out[0]=indication/100%10;
         digit_out[1]=indication/10%10;
         digit_out[2]=indication%10;

         }
        а комментарий для таких как я оставить забыл. Еще раз спасибо,ваше ключевое слово было "Пользовательская функция"

      • николай
        Добрый день! Помогите пожалуйста с контрольной работой по языкам программирования.

        • На заказ задачи не решаю. Сама преподаватель, и не люблю, когда студенты приносят заказанные решения. На вопросы могу ответить.

  • Алексей
    Здраствуйте, уважаемая Елена! Меня зовут Алексей, и я с большим удовольствием читаю некоторые ваши пояснения к работе с С++, начал самообучение путем поисков статей и всякого рода работ с микроконтроллерами. Понимаю, что на это всё нужны годы а может и целая жизнь, но интерес к творчеству присутствует огромный, в связи с этим назрел вопрос. Может, и бестолковый, но всё же. Вопрос касается компилированных прошивок,конкретно в HEX. Возможно ли из машинного кода декомпилировать обратно в текстовую команду, и если да, то как это можно сделать. Читал много разных сайтов. Люди прямо в компилированной прошивке могут её отредактировать, переписать и т.д. Каким образом они понимают, что в той или иной строчке записанно? то есть функционал той или иной строки..... И для примера... встретил две разные прошивки, которые заканчиваются одинаковыми символами...не могли бы вы подсказать что зашифрованно в этой строке :00000001FF? Заранее огромная благодарность вам за ваши труды!

    • Здравствуйте, Алексей! Да, по коду прошивки возможно дизассемблировать код. Но для этого необходимо изучить документацию на микроконтроллер, для которого этот hex получен. Каждая команда имеет свой шестнадцатеричный код, который и генерируется при формировании hex файла. Обратная операция - зная код, можно определить команду. Но для того, чтобы расшифровать, что в строке, нужно знать как минимум тип микроконтроллера. А лучше ещё и перечень ассемблерных команд с кодами для него.

      • Алексей
        я вас понял,большое спасибо.....буду вписывать команды,компилировать.....думаю таким способом можно увидеть значение шестнадцатеричного кода той или иной команды.....к примеру команда void,и посмотреть во что она скомпилируется.

  • Здравствуйте, уважаемый Администратор сайта prog-cpp.ru Меня зовут Николай, я периодически посещаю Ваш сайт и являюсь участником партнерской программы – ProfLinks.ru Пользуясь моментом, хотел бы предложить Вам воспользоваться продвижением Вашего сайта prog-cpp.ru при помощи размещения 900 "живых" ссылок с тИЦ от 10 за 150 руб. В данной услуге проводится размещение ссылок только на качественных сайтах с тИЦ от 10. Услуга включает подробный отчет. Более подробно о данной услуге Вы можете узнать на странице: http://proflinks.ru/page/5 Сервис ProfLinks.ru работает уже более 3 лет и зарекомендовал себя как качественный сервис. Также имеется тариф «Пробный» за 40 руб. В случае, если Вас заинтересовало мое предложение, то при регистрации в сервисе воспользуйтесь моей реф. (партнерской) ссылкой: http://proflinks.ru/registration/564 Буду Вам очень благодарен. ------ Заранее прошу прощения, что отвлек Вас от Важных дел. С уважением, Николай

    • К сожалению, не могу позволить себе оплачивать продвижение, т.к. сайт ничего не продаёт.

  • Очень приятный сайт с полезной информацией и достойными картинками. Пожалуйста, не забрасывайте!

  • Николай
    Язык C# использует .net библиотеки, т.е. скомпилированная команда просто вызываете те или иные функции, которые  хранятся в dll файлах.

  • Здравствуйте,спасибо за столь познавательные уроки. Пожалуйста объясните как приложение/оболочка/ОС под которую пишется программа на каком-либо языке программирования распознаёт команды написанной программы-знает что при этой команде нужно сделать именно это действие? Например, я написал исходный код на языке Си/С++, потом компилятор из него сделал машинный код (exe файл), я запустил его, и ОС выполнила команды, определённые действия, например написала "Hello World". Откуда ОС знает (может быть, это где-то в ней прописано) что при этих командах нужно вывести на экран текст "Hello World"? Возможно это странный вопрос но я никак не могу это понять. Помогите пожалуйста и спасибо за уроки.

    • Машинный код - это не что иное как набор команд, которые необходимо последовательно выполнить. Посмотрите https://prog-cpp.ru/comp-data/. Там описаны структура и форматы машинных команд и принципы построения вычислительной машины.

    • Изучать нужно начинать не языки программирования, а computer science (компьютерную науку, информатика). Там описан процесс хранения информации (числа, текст, звук, изображение) в компьютере, и как компьютер работает в принципе. Языки программирования - это часть computer science, инструмент для работы с данными посредством написания алгоритмов, моделирования и т.д. Хвататься за язык программирования, не имея малейшего представления о computer science, - глупость, путь в никуда.