Задание по c#
| |
gorlumfan | Дата: Вторник, 04 Декабря 2012, 18:20 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Здравствуйте пользователи ресурса Gcup. Есть задача, есть код программы. Программа выдает таблицу истинности значений и выводит их на экран как "True" или "False". Code using System;
class LogicalOpTable { public static void Main() {
bool p, q;
Console.WriteLine("P\tQ\tAND\tOR\tXOR\tNOT"); p = true; q = true; Console.Write(p + "\t" + q +"\t"); Console.Write((p&q) + "\t" + (p|q) + "\t"); Console.WriteLine((p^q) + "\t" + (!p));
p = true; q = false; Console.Write(p + "\t" + q +"\t"); Console.Write((p&q) + "\t" + (p|q) + "\t"); Console.WriteLine((p^q) + "\t" + (!p));
p = false; q = true; Console.Write(p + "\t" + q +"\t"); Console.Write((p&q) + "\t" + (p|q) + "\t"); Console.WriteLine((p^q) + "\t" + (!p));
p = false; q = false; Console.Write(p + "\t" + q +"\t"); Console.Write((p&q) + "\t" + (p|q) + "\t"); Console.WriteLine((p^q) + "\t" + (!p)); } } А вот собственно задание "Попытайтесь самостоятельно модифицировать программу таким образом, чтобы на экран выводились символы 1 и 0 вместо слов true и false.".С этим у меня не как не получается справится, т.е. мне не очень понятен алгоритм замены. Т.к. просто вбить значения 1 и 0 равные значениям "True" и "False" достаточно просто, а вот логический способ замены одного на другое мне не понятен. Надеюсь тут мне смогут дать толковый ответ.
Добавлено (04.12.2012, 18:20) --------------------------------------------- Уже сам придумал как это реализовать, странно что до этого момента не кто не помог с решением.В дальнейшем если у меня будут трудности с решением задач, буду постить их здесь так сказать на общее обозрение.Ведь 2 головы лучше , чем одна и уж тем более, чем больше голов тем лучше. Вот полностью рабочий вариант ответа, который заменяет все значения "true" на 1, а значения "false" на 0. Code using System;
class LogicalOpTable { public static void Main() {
bool p, q; int x,y;
Console.WriteLine("P\tQ\tAND\tOR\tXOR\tNOT"); p = true; q = true; if (p == true) x = 1; else x = 0; if (q == true) y = 1; else y = 0; if ((!p) == true) x = 1; else x = 0; Console.Write( x +"\t" + y + "\t"); Console.Write((x & y) + "\t" + (x | y) + "\t"); Console.WriteLine((x ^ y) + "\t" + (x));
p = true; q = false; if (p == true) x = 1; else x = 0; if (q == true) y = 1; else y = 0; if ((!p) == true) x = 1; else x = 0; Console.Write(x + "\t" + y + "\t"); Console.Write((x & y) + "\t" + (x | y) + "\t"); Console.WriteLine((x ^ y) + "\t" + (x));
p = false; q = true; if (p == true) x = 1; else x = 0; if (q == true) y = 1; else y = 0; if ((!p) == true) x = 1; else x = 0; Console.Write(x + "\t" + y + "\t"); Console.Write((x & y) + "\t" + (x | y) + "\t"); Console.WriteLine((x ^ y) + "\t" + (x));
p = false; q = false; if (p == true) x = 1; else x = 0; if (q == true) y = 1; else y = 0; if ((!p) == true) x = 1; else x = 0; Console.Write(x + "\t" + y + "\t"); Console.Write((x & y) + "\t" + (x | y) + "\t"); Console.WriteLine((x ^ y) + "\t" + (x)); } } И если вдруг у вас есть интересное задание или задание с которым вы сами не смогли справится, можете выкладывать их здесь.
Сообщение отредактировал gorlumfan - Вторник, 04 Декабря 2012, 21:18 |
|
| |
TreinDSM | Дата: Вторник, 04 Декабря 2012, 21:24 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Непонятно почему такая задача могла вызвать сложность. true - это и есть 1-ца, а false - это 0. Вместо того, что заморачиваться с условиями, можно было бы просто преобразовать булевский параметр в int: Code bool a = false; Console.WriteLine(Convert.ToInt16(a));
Соответственно вместо "a" можно передавать любое выражение возвращающее bool.
|
|
| |
Aed_Mindgart | Дата: Вторник, 04 Декабря 2012, 21:48 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Бред if (p == true) x = 1; else x = 0; if (q == true) y = 1; else y = 0; if ((!p) == true) x = 1; else x = 0;
Добавлено (04.12.2012, 21:48) --------------------------------------------- Не работает D:
Сообщение отредактировал Aed_Mindgart - Вторник, 04 Декабря 2012, 21:49 |
|
| |
Racot | Дата: Вторник, 04 Декабря 2012, 21:57 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| полностью согласен с TreinDSM . Тебе просто нужно явно преобразовать типы, вот и все.
Специалист "во всем" - специалист "ни в чем" ------------------------------------ Script Reference для Unity3D Помогу со скриптами for Unity3D
|
|
| |
gorlumfan | Дата: Вторник, 04 Декабря 2012, 22:00 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Quote (Aed_Mindgart) Не работает D: Сейчас нету возможности проверить, завтра гляну.Quote (TreinDSM) Непонятно почему такая задача могла вызвать сложность. true - это и есть 1-ца, а false - это 0. Вместо того, что заморачиваться с условиями, можно было бы просто преобразовать булевский параметр в int: Code
bool a = false; Console.WriteLine(Convert.ToInt16(a));
Соответственно вместо "a" можно передавать любое выражение возвращающее bool. На счет данной трактовки не знаю что сказать. Еще не изучил данную терминологию. На момент задания, кроме операторов использованных мной, я физически знать не мог.Да и на сколько мне известно при приведении типов нельзя переводить тип bool в int или я этого еще не изучил ?
|
|
| |
TreinDSM | Дата: Вторник, 04 Декабря 2012, 22:13 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| gorlumfan, В C# нельзя привести bool к int тем же образом, каким можно привести int к float. Т.е. запись вида: int i = 1; bool b = (bool)i; не пройдет. Но можно использовать методы Convert.ToInt16, Convert.ToInt32, Convert.ToInt64, куда можно передать булевский аргумент и получить на выходе целочисленное значение. Такого рода пример я собственно и привел.
|
|
| |
gorlumfan | Дата: Четверг, 13 Декабря 2012, 11:42 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Quote (TreinDSM) В C# нельзя привести bool к int тем же образом, каким можно привести int к float. Т.е. запись вида: int i = 1; bool b = (bool)i; не пройдет. Но можно использовать методы Convert.ToInt16, Convert.ToInt32, Convert.ToInt64, куда можно передать булевский аргумент и получить на выходе целочисленное значение. Такого рода пример я собственно и привел. Честно говоря, не знал про данную функцию. Просто по скольку сейчас язык изучаю, исходил из расчета тех знаний которые имел. Следовательно пусть и примитивно, но все же пытался решить поставленную задачу. А за подсказку +.
Добавлено (05.12.2012, 07:32) --------------------------------------------- Спасибо за подсказку с конвертацией типов.Все проверил, все работает как надо. Code using System;
class LogicalOpTable { public static void Main() {
bool p, q;
Console.WriteLine("P\tQ\tAND\tOR\tXOR\tNOT"); p = true; q = true; Console.Write(Convert.ToInt16(p) + "\t" + Convert.ToInt16(q) + "\t"); Console.Write(Convert.ToInt16(p & q) + "\t" + Convert.ToInt16(p | q) + "\t"); Console.WriteLine(Convert.ToInt16(p ^ q) + "\t" + Convert.ToInt16(!p));
p = true; q = false; Console.Write(Convert.ToInt16(p) + "\t" + Convert.ToInt16(q) + "\t"); Console.Write(Convert.ToInt16(p & q) + "\t" + Convert.ToInt16(p | q) + "\t"); Console.WriteLine(Convert.ToInt16(p ^ q) + "\t" + Convert.ToInt16(!p));
p = false; q = true; Console.Write(Convert.ToInt16(p) + "\t" + Convert.ToInt16(q) + "\t"); Console.Write(Convert.ToInt16(p & q) + "\t" + Convert.ToInt16(p | q) + "\t"); Console.WriteLine(Convert.ToInt16(p ^ q) + "\t" + Convert.ToInt16(!p));
p = false; q = false; Console.Write(Convert.ToInt16(p) + "\t" + Convert.ToInt16(q) + "\t"); Console.Write(Convert.ToInt16(p & q) + "\t" + Convert.ToInt16(p | q) + "\t"); Console.WriteLine(Convert.ToInt16(p ^ q) + "\t" + Convert.ToInt16(!p)); } } Спасибо за советы в решении задачи.
Добавлено (06.12.2012, 09:27) --------------------------------------------- Ребят появилась новая задачка. Может кто подсказать ход её решения. "Напишите фрагмент кода, в котором для предотвращения ошибки деления на ноль использован быстрый оператор AND." А что то то пока своими силами, не очень получается придумать алгоритм.
Добавлено (06.12.2012, 09:40) --------------------------------------------- Немного посидев подумав, пришел вот к такому варианту. Code //В программе демонстрируется использование быстрого оператора AND //для предотвращения деления на 0. using System; class Del { public static void Main() { int a, b;
a = 10;//Делимое число. b = 1;//Делитель числа.
//Если наш делитель "b = 0" то деление происходить не будет //так как , делить на 0 нельзя. if (b != 0 && (a % b) == 0) Console.WriteLine(a + " является делителем числа " + b); else Console.WriteLine("Делить на ноль нельзя"); } } Проверка деления на ноль производится благодаря быстрому оператору AND.
Добавлено (06.12.2012, 12:01) --------------------------------------------- Вот еще одно задание "Напишите программу, которая находит все простые числа в диапазоне от 1 до 100." Для тех кто не знает.Просто число это - то число которое делится на 1 и само на себя. А вот собственно и программа которая выводи на экран только простые числа. Code using System; class UNumber { public static void Main() { int a;
for(a = 0;a < 100; a ++){ for(a = 2;a < 100; a++){ if (a != 0 && (a % 2) == 0); else Console.WriteLine(a); } } } } Если можно упростить данный алгоритм, буду рад услышать ваши коментарии. Так как по идеи в данном алгоритме должно быть всего 3 условия. Число делится на 1, на себя и не делится на 2 без остатка.
Добавлено (06.12.2012, 12:21) --------------------------------------------- И еще ребят вот задание "Самостоятельно перепишите программу, предназначенную для вывода таблицы истинности (проект 2-2), таким образом, чтобы в ней вместо escape-последовательностей использовались копирующиеся строковые литералы с вложенными знаками табуляции и символами новой строки." Я правильно понял задание ? В итоге получается такой код. Или если не правильно, подскажите в чем заключается суть задания. Code using System;
class LogicalOpTable { public static void Main() {
bool p, q;
Console.WriteLine("P\tQ\tAND\tOR\tXOR\tNOT"); p = true; q = true; Console.Write((p) + "\t" + (q) + "\t" + (p & q) + "\t" + (p | q) + "\t" + (p ^ q) + "\t" + (!p)+"\n"); p = true; q = false; Console.Write((p) + "\t" + (q) + "\t" + (p & q) + "\t" + (p | q) + "\t" + (p ^ q) + "\t" + (!p) + "\n");
p = false; q = true; Console.Write((p) + "\t" + (q) + "\t" + (p & q) + "\t" + (p | q) + "\t" + (p ^ q) + "\t" + (!p) + "\n");
p = false; q = false; Console.Write((p) + "\t" + (q) + "\t" + (p & q) + "\t" + (p | q) + "\t" + (p ^ q) + "\t" + (!p) + "\n");
} } Добавлено (10.12.2012, 16:59) --------------------------------------------- Еще раз здравствуйте, опять столкнулся с проблемой которую сам решить не могу. Вот код программы. Нужно чтобы то число которое ввели с клавиатуры выводилось . Проблема в том, что какое бы я число не ввел, на выходе получаю числа в диапазоне от 49 до 57. С чем связано, так и не смог разорбраться. Code using System; class SumTest { public static void Main() { int i; Console.WriteLine("Введите число для преобразования"); i = Console.Read(); Console.WriteLine("Вы ввели число " + i);
} } Добавлено (13.12.2012, 11:42) --------------------------------------------- Проблема решена, используем метод Parse для приведения числа вводимого с клавиатуры в эквивалентное число int32. Использование оправдывает себя для работы с консолью. Вот собственно код программы. Code using System; class SumTest { public static void Main() { int i; Console.WriteLine("Введите число для преобразования"); i = int.Parse(Console.ReadLine()); Console.WriteLine("Вы ввели число " + i);
} } А вот собственно синтаксис данного метода Code public static int Parse( string s )
Сообщение отредактировал gorlumfan - Четверг, 06 Декабря 2012, 12:21 |
|
| |
Rean | Дата: Понедельник, 17 Декабря 2012, 11:29 | Сообщение # 8 |
участник
Сейчас нет на сайте
| Quote (gorlumfan) Если можно упростить данный алгоритм, буду рад услышать ваши коментарии. Так как по идеи в данном алгоритме должно быть всего 3 условия. Число делится на 1, на себя и не делится на 2 без остатка. 2 - тоже простое число. 15 - не простое число.
Программа работает некорректно. Какие условия? Функции могут быть? Не знаю, подойдет ли, но точно работает:
Code class Program {
static bool Simple(int num) { if (num < 2) return false;
for (int i = 2; i <= (num / 2); i++) if (num % i == 0) return false;
return true; }
static void Main(string[] args) { for(int a = 0; a < 100; a++) { if (Simple(a)) Console.WriteLine(a); }
Console.ReadKey(); } }
|
|
| |
gorlumfan | Дата: Понедельник, 17 Декабря 2012, 20:08 | Сообщение # 9 |
участник
Сейчас нет на сайте
| Rean, Спасибо за помощь. Просто опять же решал задачу основываясь на полученных знаниях. Вы же судя по коду применяли, несколько больший спектр знаний .
|
|
| |
Rean | Дата: Понедельник, 17 Декабря 2012, 21:56 | Сообщение # 10 |
участник
Сейчас нет на сайте
| gorlumfan, всегда пожалуйста! Если не секрет, то чем именно на данный момент ограничены ваши знания в данной области? Почему я спрашиваю: как мне кажется, я не использовал каких-либо особенных техник (разве что, статическую функцию) при решении задачи. Основной упор здесь идет в алгоритм и понятие "простые числа".
Все же, если будет необходимо, то я могу разъяснить некоторые конструкции.
|
|
| |
|