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

  • Автор темы Guest
  • Дата начала
G

Guest

#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");
}

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

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Программа считает что-то типа контрольной суммы строки, путем операции "исключающее или" - оно же "Сложение по модулю 2" или "XOR" (операция "^" в С++).

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

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

Vadik(R)

Well-known member
12.12.2007
469
0
#3
gets(cfeld);
for (i=0;cfeld!=0;i++)
{
n=n^cfeld;
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
1. Читает строку
2. Цикл for. Так как строка "сишная", то он идёт до тех пор, пока не будет достигнут нуль-символ строки (конец строки по сути)
3. Сложение по модулю 2 с очередным символом строки
4. Вывод строки на экран
 
A

Araneus

#4
Возник вопрос, почему вылазит ошибка на строке 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();
}
 
W

Whatka

#5
потому что надо указать тип главной функции(void main() например)
 
R

Romashkinu

#7
Не помогает
Пишет E2268 Call to undefined function 'system'
Может это быть из-за того, что компилирую в Embarcadero RAD Studio XE?
Используй 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">