Задать вопрос
  • Как сложить все элементы массива, не используя цикл C++?

    @poniyur
    #include <iostream>
    #include <numeric>
    
    int main (){
       const int arrayLength = 3; // раз уж вы пользуетесь массивом, то и длину точно знаете
       int students[arrayLength] = { 1, 4, 7 };   
       int sum = std::accumulate(students, students + arrayLength, 0);
       std::cout << "The array sum is " << sum << std::endl;
       return 0;
    }
    Ответ написан
    2 комментария
  • Почему программа падает при вводе отрицательного числа?

    @Griglapidus
    C++/Qt
    Ваш код не может нормально работать хотя бы потому что вы создаете массив nums[N]; с N=0;. Когда вы в него пишете, каждый раз рискуете поймать ошибку доступа к памяти.
    При нахождении минимального значения вы явно опечатались nums[i] = min;, должно быть наоборот))
    int min = nums[0];. min должен быть тоже float, иначе вы получите немного не то что ожидаете.
    Ответ написан
    Комментировать
  • Как проверить принадлежность треугольника пересечению двух окружностей?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Треугольник лежит на пересечении кругов" означает, что все точки треугольника принадлежат пересечению кругов, то есть одновременно принадлежат обоим кругам.
    Поскольку пересечение кругов выпуклая фигура, а стороны треугольника - отрезки прямых, то достаточно убедиться, что все три вершины одновременно принадлежат обоим кругам.
    Ответ написан
    5 комментариев
  • Магия int при делении на float?

    wisgest
    @wisgest
    Не ИТ-специалист
    а затем в printf вывести через символ преобразования для целых чисел, то есть %d

    Это не символ преобразования, ничего не преобразуется: вы сами сообщаете (обманываете) printf о типе переданных данных.
    Преобразование выполняется как-то так
    printf("%d", (int)(b*a));
    Ответ написан
    2 комментария
  • Функция gets в языке С. Почему посимвольное сравнение не работает?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Что тут вообще написано?

    Сначала txt1 - это FILE*. Потом зачем-то txt1=fgets(sim1), то есть в переменную типа FILE* присваивается что? Советую посмотреть описание fgets в документации:

    char *fgets(char *s, int size, FILE *stream);

    Присваивается char*. А откуда, из какого файла?

    Думаю, имелось в виду:

    sim1=fgetc(txt1);

    Тогда это имеет какой-то смысл.

    Далее, while по txt1 && txt2 не имеет смысла - указатели будут ненулевыми даже когда будет достигнут конец файлов. Правильнее обернуть в такой цикл:

    while(!feof(txt1) && !feof(txt2)) { ... }

    В конце проверить, что feof(txt1) && feof(txt2), иначе один из файлов закончился, а второй нет - размеры не совпадают, файлы отличаются.

    А более правильно делать блочное чтение, с помощью fread и memcmp, это гораздо эффективнее по скорости (да, конечно, для мелких файлов разница незаметна, но всё же):

    int isequal=1;
    while(!feof(txt1) && !feof(txt2)) {
      char buf1[1024];
      char buf2[1024];
      int readsize1 = fread(buf1, 1, 1024, txt1);
      int readsize2 = fread(buf2, 1, 1024, txt2);
      if (readsize1 != readsize2) {
        isequal=0;
        break;
      } else {
        if (memcmp(buf1, buf2, readsize1)) {
          isequal=0;
          break;
      }
    }
    
    if(isequal) {
      // одинаковы
    } else {
      // отличаются
    }
    Ответ написан
    2 комментария
  • Простенькая программа на С выдаёт ошибку. Как исправить?

    @TheCalligrapher
    Здесь вся программа набита ошибками под самую завязку.

    • Куда пропал тип возвращаемого значения у функции main()?
    • Почему в scanf("%f",&b) использован формат %f? Какой формат следует использовать для ввода значений типа double?
    • Что по-вашему проверяет if (a>x>b)?
    • Что это за чушь: pow(cos,2)? Что там делает этот cos?
    • Что случилось с балансом скобок в if ((x>=b)?
    • Что это за выражения под каждым if, которые как будто что-то вычисляют, но никуда не сохраняют результаты своих вычислений? То есть они фактически ничего не делают. Зачем они такие нужны?
    • printf в конце печатает значение переменной z. Но вы не назначили этой переменной никакого значения.
    Ответ написан
    Комментировать
  • Как решить данную задачу по курсовой на языке С++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вам ДАНА матрица. Значит в программе надо
    1) прочитать числа N и M (заведите 2 переменные и прочитайте их, через cin)
    2) Завести N*M матрицу. В C++ стандартом для массивов является класс vector. Двумерный массив - это вектор векторов.
    vector<vector<int>> a(n);
    Это создаст вектор из n векторов, но они все будут пустые. Надо во время считывания ( у вас будет 2 вложенных цикла) перед считыванием i-ой строки i-ый вектор отресайзить вызвав a[i].resize(m). И далее можно будет читать a[i][j]
    3) Теперь, собственно, алгоритм. Найдите наибольший элемент. Для этого заведите 3 переменные - текущий максимум (можно инициализировать a[0][0]) и его координаты mx и my (инициализируйте нулями). Пройдитесь по матрице двумя вложенными циклами и, если текущий элемент больше максимума - перезапишите максимум и запомните текущие переменные циклов в mx и my.
    4) Теперь поменяйте местами 0-ую строку со строкой в которой максимум. Для этого одним циклом пройдитесь по столбцам (от 0 до M-1) и поменяйте местами a[0][j] и a[mx][j].
    5) Теперь то же самое, но по столбцам. Цикл от 0 до N-1 и меняйте элементы a[i][0] и a[i][my].
    6) В конце выведите матрицу двумя вложенными циклами.

    Для смены двух значений нужна временная перменная, например tmp.
    Ответ написан
    1 комментарий
  • В чём проблема?

    fzfx
    @fzfx
    18,5 дм
    значит что-то не так.
    Ответ написан
    1 комментарий
  • Как создать независимый процесс?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if (a == 1) {
            CreateProcess(szFileName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
            WaitForSingleObject(pi.hProcess, INFINITE);
            ...
        }
        ...
        return 0;

    запускается новый процесс но если его закрыть то закрывается и родитель.

    Ну так ты ровно это и написал: родитель запускает процесс и ждёт его завершения, а после этого завершается сам. Хочешь другого поведения -- пиши другое поведение.
    Ответ написан
    3 комментария
  • Как правильно передать двумерный динамический массив в функцию?

    Adamos
    @Adamos
    В С++ двумерный динамический массив передается в функцию так:
    void Foo(std::vector< std::vector <int> > &matrix)
    А онанизм с массивами указателей - это спагетти и гарантированные утечки и сегфолты.
    Ответ написан
    6 комментариев
  • Выражение должно иметь типа указателя на объект. В чем суть ошибки?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Вынужден согласиться с Illia Nezhyhai - этот код - одна большая ошибка :) Причем главная ошибка в том, что у параметров функции нет типа, а следовательно компилятор предполагает, что они имеют тип int (для С, в С++ типа по умолчанию нет, попытка откомпилировать данный код вызовет ошибку). Поэтому разумеется выражение arr[i][j] = что-то там будет неверным.

    Во-первых, все параметры функций всегда должны типизироваться - это Вас и спасет от таких вот нелепых ошибок и напомнит, что передается в функцию, если Вы по собственной лени не напишете комментарий с описанием этого
    Во-вторых, документирование передаваемых параметров и присвоение переменным нормальных имен, а не i,j,k - поможет и другому, кто будет Ваш код читать, и Вам самому - когда Вы в него полезете через год.
    Ответ написан
    4 комментария
  • Как сделать "переопределение" функции в c++?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Твой вопрос можно решить таким способом.
    #include <iostream>
    #include <functional>
    
    class Enemy final
    {
    public:
    	std::function<void()> update = []() {};
    };
    
    int main( int argc, char* argv[] )
    {
    	Enemy enemy;
    	enemy.update = []() { std::cout << "Hello"; };
    
    	enemy.update();
    	return 0;
    }
    Ответ написан
    Комментировать
  • Случайный рандом с коэффициентом шанса, как сделать?

    myjcom
    @myjcom Куратор тега C++
    И это вприницпи работает. Как мне сделать так, что бы у каждого предмета можно было выставлять определённый коофицент выпадения? Или хотя бы подскажите куда копать, в каком направлении.

    Смотри:
    В урну поместили 2 шара: черный и белый, какова вероятность того, что первый наугад вынутый шар окажется белым?

    Дальше

    В урну поместили три шара: белый, черный и красный, какова вероятность того, что первый наугад вынутый шар окажется белым?

    Дальше
    В урну поместили четыре шара: 2 белых, черный и красный, какова вероятность того, что первый наугад вынутый шар окажется белым?

    Учитывай что полная вероятность равна 1.0

    Вот так это работает, а все остальное вздор... .

    Другими словами тебе нужно N штук каждого элемента пропорционально твоему коэфиценту выпадения. Потом https://en.cppreference.com/w/cpp/algorithm/random...

    А дальше рандомно дёргать из контейнера, оставлять их там или удалять зависит от задачи.

    Использовать распределения или нет аналогично. https://en.cppreference.com/w/cpp/numeric/random

    Более сложные варианты я описывать не возьмусь.
    Ответ написан
    Комментировать
  • Зачем определению(definition) объявлять(to declares), если есть определение(definition), которое определяет(to defines)?

    @res2001
    Developer, ex-admin
    int val;
    Является одновременно и определением и объявлением.
    В данном случае происходит реальное выделение памяти под переменную.

    Объявление это
    extern int val;
    Оно говорит компилятору, что где-то есть переменная val типа int. В этом случае компилятор уже знает какие операции допустимо использовать с этой переменной, но память под переменную не выделяет. Реальный адрес переменной подставит линковщик, когда будет собирать исполняемый файл из нескольких единиц трансляции.
    Если в одной единице трансляции вы используете объявление переменной, то где-то (в другой единице трансляции или в этой же) вы должны обязательно сделать определение. Иначе линковщик не найдя определения выдаст undefined reference.
    Если же определять переменную в каждой единице трансляции, то линковщик выругается на redefinition symbol, т.е. несколько символов с одним именем (переопределение существующего символа).
    Если вам все таки нужны символы с одним именем в разных единицах трансляции, то вы должны объявлять их static. В этом случае будет использоваться локальная для данной единицы трансляции переменная с данным именем.

    С функциями все аналогично.
    Ответ написан
  • Что так может искрить в блоке питания?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Пока искры не будут долетать до обоев можно не менять.
    Ответ написан
    Комментировать
  • Как реализовать работу двух циклов одновременно?

    @aarifkhamdi
    Запусти их в двух потоках
    Ответ написан
    Комментировать
  • Как сделать циклический сдвиг массива на 4 вправо?

    @menkar3
    std::rotate?
    #include <algorithm>
    ...
    int main()
    {
        const int n = 12;
        int a[n] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
        rotate(a, &a[n] - 4, &a[n]);
        for (auto n : a)
        {
            cout << n << " ";
        }
        return 0;
    }
    Ответ написан
    Комментировать
  • Чем обусловлена замена северного и южного моста чипсетом?

    Zoominger
    @Zoominger Куратор тега Железо
    System Integrator
    Что-то не совсем понятно.
    Понятие "чипсет" включает в себя и северный мост, и южный.
    Им вовсе не обязательно быть в одной микросхеме.
    Ответ написан
    Комментировать
  • Чем обусловлена замена северного и южного моста чипсетом?

    Jump
    @Jump
    Системный администратор со стажем.
    Чем обусловлена замена северного и южного моста чипсетом?
    Вопрос не имеет смысла.
    Чипсет - набор (set) микросхем (chip) - обеспечивающих работу процессора.
    Северный и южный мост - название некоторых блоков чипсета.

    В итоге серверный и южный мост это часть чипсета. Никто ни чем их не заменял.

    Просто раньше компьютеры были большие, а сейчас становятся все меньше, поэтому многие блоки физически располагаются не на тысячах микросхем, на нескольких этажах здания, а на одной маленькой микросхеме.
    Ответ написан
    Комментировать
  • Как поправить вывод вектора структуры в файл?

    myjcom
    @myjcom Куратор тега C++
    void writeBinary(ostream& os, structBook const& book)
    {
      ostringstream ss;
      ss << book.bookId
         << book.bookName.size() << book.bookName
         << book.bookAuthorName.size() << book.bookAuthorName
         << book.bookAuthorSurname.size() << book.bookAuthorSurname
         << book.year << book.pages << book.onplace
         << book.genre.size() << book.genre
         << book.section.size() << book.section;
      os.write(reinterpret_cast<char*>(ss.str().size()), sizeof(decltype(ss.str().size())));
      os.write(ss.str().data(), ss.str().size());
    }
    
    // ...
    
    for(auto const& b : vecStructBook)
    {
      writeBinary(bookDatabase, b);
    }

    считывать наоборот.
    Ответ написан
    5 комментариев