Форум программистов, компьютерный форум CyberForum.ru

Задачи для тренировки и лучшего понимания - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Возможно переписать программу? http://www.cyberforum.ru/cpp/thread153534.html
Есть программа Upgrade UA.exe хочу запустить ее на windows mobile 6. Возможно ли ее переписать.
C++ scanf Пусть нужно читать из текста слова, пропуская все символы, кроме a-z и A-Z. То есть из текста Hello, world! ololo O_o получить только Hello world ololo O o Меня интересует, можно ли это сделать с помощью одной лишь только функции scanf. Она, насколько я понял, позволяет немного использовать регулярные выражения (точно не знаю, они ли это). Так вот, можно ли сделать так, чтобы к примеру... http://www.cyberforum.ru/cpp/thread153153.html
C++ Вернуть stdin в консоль
Допустим я перенаправил поток stdin/stdout в файл с помощью функции freopen. Как заставить его снова работать с консолью? Добавлено через 9 минут Нашел. #include <cstdlib> #include <stdio.h> #include <conio.h> using namespace std;
Прошу помочь.Подключение dll на неуправляемом С/С++ C++
Возникла проблема.Есть рабочая dll, необходимо подключить к CLR приложению. Подключение происходит нормально. Все функции работают нормально кроме одной(хотя dll проверял все работает в обычных Win32 приложениях).Данная функция производит загрузку из файла если файл не найден-возвращает код ошибки,т.е. все нормально.Но если файл находит(путь указан точный) то происходит ошибка исключение...
C++ Не сразу закрывающаяся программа http://www.cyberforum.ru/cpp/thread152799.html
Есть команды в терминале.. вроде telnet или sql, эти программы запускаешь и они остаются открытыми пока не дашь команду, например, quit. Во время работы программы она показывает знак приглашения новой команды ">". Как это можно осуществить в C++?
C++ Парсер на С вопшем есть файл с текстом..... в етом файле есть какие даные(мусор)...и есть дни: Понедельник,Вторник,среда......с етого файла нада вывести ети дни в порядке нахождениэ... ето походу несложная задача,но для новичка сложно.... нужно именно на С а не С++ ... я пока только думал считывать каждую строку в масив и проверять каждый елемент по буквам... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
04.08.2010, 17:05     Задачи для тренировки и лучшего понимания
Варианты тестов с различным поведением Си и Си++
  1. В Си если мы имеем тип "struct s", то к нему можем обращаться только через "struct s", а в Си++ можно через "s".

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #include <stdio.h>
     
    int x[1111];
     
    int
    main (void)
    {
      struct x {int a;} s;
     
      if (sizeof (x) == sizeof (s))
        printf("lang=C++\n");
      else
        printf("lang=C\n");
      return 0;
    }
  2. Здесь на 100% не уверен, надо стандарты читать. Но вроде бы дело было такое. В двухаргументных операциях с разными типами аргументов приведение типа делается для "более короткого" типа к "более длинному". Далее идут пояснения, что такое "более длинный". В случае целых типов одного размера, беззнаковый тип является более длинным. Но с битовыми полями немного сложнее. В Си считается, что битовое поле трактуется как обычная переменная этого же типа, а потому битовое поле типа unsigned размера 3 считается "более широким", чем 32-битная переменная типа int (потому что сравнение идёт через типы). А в Си++ сначала идёт честное сранение размеров, а потому битовое поле размера 3 всегда более короткое чем переменная размера 32 (независимо от знаковости типов). Или что-то типа того. Как уже гвоорил, на 100% не уверен

    Кстати, я поторопился назвать этот способ честным. Тут есть всякие unspecified случаи (то как приведение отрицательного значения к беззнаковому типу).

    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    #include <stdio.h>
     
    struct { unsigned d:3; } s = { 7 };
    unsigned sd = 7;
     
    main()
    {
      int x = -1;
      int p1, p2;
     
      p1 = x < s.d;
      p2 = x < sd;
     
      printf("%d %d\n", p1, p2);
    }
    Код
    $ g++ t.c ; ./a.out
    0 0
    
    $ gcc t.c ; ./a.out
    1 0
  3. В Си++ есть комментарии через "//", а в Си нет

    C
    1
    2
    
    a = b //**/ c
        + d;
    Компилятор Си два слеша как комментарий не должен воспринимать, а потому комментарием будет "/**/" и выражение будет "b / c + d". А компилятор Си++ два слэша воспримет как комментарий, а потому выражение будет "b + d".

    Решение назвал теоретически честным, потому что, например, gcc в режиме Си так же воспринимает "//".

  4. С точки зрения Си++ переменные "int x" и "const int x" - это две разные переменные. Тест состоит из двух файлов

    C
    1
    
    const int x = 1;
    C
    1
    2
    
    int x;
    int main() { return x; }
    В режиме Си два объекта "x" должны быть одним и тем же. В Си разрешено линковать инициализированный и неинициализированный объекты содним именем. В итоге после линковки будет одна переменная "x", которая статически проинциализирована единицей. В режиме Си++ после линковки будут две переменные "x": одна инициализирована единицей (const int x), адругая - нулём (int x), поскольку глобальные неинициализированные объекты инициализируются нулём

Добавлено через 58 минут
Цитата Сообщение от fasked Посмотреть сообщение
почему же неправильно, если в Си sizeof('a') == sizeof(int), а в Си++ sizeof('a') == sizeof(char)
Но sizeof(char) может быть равен sizeof(int). Например, это имеет место быть на некоторых сигнальных процессорах
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru