Помогите Новичку

Тема в разделе "C/C++/C#", создана пользователем -, 17 янв 2012.

  1. Гость

    Здравствуйте уважаемые знатоки)
    В наличии имеется простая программа, но я к сожалению не совсем понимаю что она делает (думаю она преобразовывает набор чисел в код). Если кому не трудно, опишите мне все строки как можно подробней. Но можно и просто неизвестные мне команды, их я подчеркну.
    Программа из немецкой школы.

    #include <stdio.h>
    main() {
    int i;
    int n=0;
    char cfeld[41];
    printf("Bitte Zeichenkette eingeben: ");
    gets(cfeld);
    for (i=0;cfeld!=0;i++)
    {
    n=n^cfeld;
    }
    printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
    system("pause");
    }

    Более простые решения приветствуются)
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Программа считает что-то типа контрольной суммы строки, путем операции "исключающее или" - оно же "Сложение по модулю 2" или "XOR" (операция "^" в С++).

    n = 0;
    для каждого символа строки: n = n ^ следующий символ

    можно немного упростить написав: n ^= следующий символ - идентично предыдущей записи
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    1. Читает строку
    2. Цикл for. Так как строка "сишная", то он идёт до тех пор, пока не будет достигнут нуль-символ строки (конец строки по сути)
    3. Сложение по модулю 2 с очередным символом строки
    4. Вывод строки на экран
     
  4. Araneus

    Araneus Гость

    Возник вопрос, почему вылазит ошибка на строке system("pause")?

    Поэтому привожу комментарии и упрощение в коде с использованием функции getch();


    Код (C++):
    //Подключение библиотеки, содержащей функции работы со строками printf(), gets()
    #include <stdio.h>
    //Подключение библиотеки, содержащей функцию getch() - обычно используеться для
    //того, чтобы считать введенный символ, но будет использоваться для того, чтобы
    //задержать инфу на экране
    #include <conio.h>
    main()
    {
    //Знадание начального значения контрольной суммы
    int n=0;
    //обьявление переменной в виде строки из 41 символа
    char cfeld[41];
    // Выводит "Пожалуйста, введите строку:"
    printf("Bitte Zeichenkette eingeben: ");
    //Записывает введенную строку в переменную cfeld
    gets(cfeld);
    //Цыкл, раборающий пока не будет достигнут конец строки
    for (int i=0;cfeld[i]!=0;i++)
    {
    //Выполнение операции "сложение по модулю 2" текущего
    //значения контрольной суммы и текущего элемента строки
    n^=cfeld[i];
    }
    //Выводит на экран "У строки _____ контрольная сумма _____"
    printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
    //Задерживает информацию на экрае до первого нажатия кнопки
    getch();
    }
     
  5. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    потому что надо указать тип главной функции(void main() например)
     
  6. Araneus

    Araneus Гость

    Не помогает
    Пишет E2268 Call to undefined function 'system'
    Может это быть из-за того, что компилирую в Embarcadero RAD Studio XE?
     
  7. Romashkinu

    Romashkinu Гость

    Используй Borland C++ 3.1, всё работает.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Результат</div></div><div class="sp-body"><div class="sp-content"> [​IMG]
     
  8. Гость

    Всем Спасибо=)
     
Загрузка...
Похожие Темы - Помогите Новичку
  1. rn3rjd
    Ответов:
    9
    Просмотров:
    1.231
  2. maxiik
    Ответов:
    3
    Просмотров:
    1.574
  3. zaza41rus
    Ответов:
    0
    Просмотров:
    1.054
  4. Radion2
    Ответов:
    0
    Просмотров:
    1.669
  5. forem0st
    Ответов:
    6
    Просмотров:
    3.540

Поделиться этой страницей