Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 00:57   #1
Andryhas
Новичок
Джуниор
 
Регистрация: 17.01.2012
Сообщений: 4
По умолчанию Простая программа в С, нужно розабрать

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

Код:
#include <stdio.h>
main() {
int i;
int n=0;
char cfeld[41];
printf("Bitte Zeichenkette eingeben: ");
gets(cfeld);
for (i=0;cfeld[i]!=0;i++)
{
n=n^cfeld[i];
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
system("pause");
}
Более простые решения приветствуются)

Последний раз редактировалось ACE Valery; 17.01.2012 в 14:28.
Andryhas вне форума Ответить с цитированием
Старый 17.01.2012, 01:44   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
n^cfeld[i]
В Си нету никакой операции, обозначаемой знаком ^.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.01.2012, 02:01   #3
Andryhas
Новичок
Джуниор
 
Регистрация: 17.01.2012
Сообщений: 4
По умолчанию

это xor логическая операция, которая сравнивает два операнда, и в результате дает 0, если операнды имеют одинаковые значения, и 1, если операнды имеют разные значения.
^ используется при распределении по битам
Andryhas вне форума Ответить с цитированием
Старый 17.01.2012, 02:42   #4
ERAGORN
Пользователь
 
Аватар для ERAGORN
 
Регистрация: 02.01.2012
Сообщений: 46
По умолчанию

Может быть - таким образом вычисляется контрольная сумма(значение) строки.
ERAGORN вне форума Ответить с цитированием
Старый 17.01.2012, 04:02   #5
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Код:
int n=0; // объявление переменной целого типа
printf("Bitte Zeichenkette eingeben: "); // вывод сообщения
gets(cfeld); // читает входящую строку и записывает в символьную переменную cfield
for (i=0;cfeld[i]!=0;i++) // пока значение индекса не будет равен нулю(тут правильней был бы цикл while), будет работать распределение по битам
{
n=n^cfeld[i];
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n); // вывод введённой строки, вывод строки после операции над ней
}

Последний раз редактировалось hvz-; 17.01.2012 в 04:04.
hvz- вне форума Ответить с цитированием
Старый 17.01.2012, 06:41   #6
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от hvz- Посмотреть сообщение
Код:
int n=0; // объявление переменной целого типа
printf("Bitte Zeichenkette eingeben: "); // вывод сообщения
gets(cfeld); // читает входящую строку и записывает в символьную переменную cfield
for (i=0;cfeld[i]!=0;i++) // пока значение индекса не будет равен нулю(тут правильней был бы цикл while),
                          // будет работать распределение по битам
{
n=n^cfeld[i];
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n); // вывод введённой строки, вывод строки 
// после операции над ней
}
Немного подкорректирую:

Код:
int n=0; // объявление переменной целого типа и инициализация её нулём
printf("Bitte Zeichenkette eingeben: "); // вывод сообщения
gets(cfeld); // функция gets считывает следующую строку из потока ввода в массив s, заменяя символ конца
             // строки '\n' на '\0'. Возвращает s при нормальном завершении или NULL, если достигнут конец 
             // файла или обнаружена ошибка  (цитата из K&R, прил. Б)
for (i=0;cfeld[i]!=0;i++) // пока символ в строке не будет равен нулю, правильнее было бы написать: cfeld[i]!= '\0'
{
    n=n^cfeld[i];
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n); // вывод введённой строки, контрольного кода
p.s. цикл while действительно логичнее:
Код:
while (c = cfeld[i++]) {
    n=n^c;
}

Последний раз редактировалось 8Observer8; 17.01.2012 в 06:51.
8Observer8 вне форума Ответить с цитированием
Старый 17.01.2012, 14:23   #7
Andryhas
Новичок
Джуниор
 
Регистрация: 17.01.2012
Сообщений: 4
По умолчанию

с while (c = cfeld[i++]) программа не работает...
Она должна также уметь обрабатывать пробел и 0
Andryhas вне форума Ответить с цитированием
Старый 17.01.2012, 14:34   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Она должна также уметь обрабатывать пробел и 0
Код:
for (i = 0; i < strlen(s); i++)
почему не
Цитата:
Код:
while (c = cfeld[i++])
и
for (i=0;cfeld[i]!=0;i++)
Потому что если в предложении есть пробел то цикл сработает до пробела!
(если не ошибаюсь);

есть ещё вопросы?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 17.01.2012, 23:30   #9
Andryhas
Новичок
Джуниор
 
Регистрация: 17.01.2012
Сообщений: 4
По умолчанию

char cfeld[41]; это же вроде как количество зарезервированных ячеек в buffer-ре, счет идет тогда от 0 до 41 то есть в общем 42 символа или всетаки 41?
и почему он становится char cfeld[i]; почему i ?
Вот пожалуй все, заранее большущее спасибо))
Andryhas вне форума Ответить с цитированием
Старый 18.01.2012, 02:16   #10
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Andryhas Посмотреть сообщение
с while (c = cfeld[i++]) программа не работает..
Не работает потому, что в условии цикла увеличение индекса массива cfield будет всегда выполняться, пока не дойдёт до конца, а после конца(cfield[42]) он выдаст ошибку т.к. такого индекса в данном массиве не существует. (Или я ошибаюсь ?)

З.Ы.
Лучше основательно подучи язык что бы в дальнейшем самому решать задачки.

8Observer8, спасибо за дополнение комментариев.
hvz- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
простая программа stap Паскаль, Turbo Pascal, PascalABC.NET 3 21.12.2011 14:49
Простая программа Freeman-des Помощь студентам 1 02.12.2010 18:07
Простая программа russian-stalker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 27.11.2010 22:52
Простая программа Distr Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.11.2007 08:27