Среда, 13 Ноября 2024, 11:45

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Задание по 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, всегда пожалуйста!
Если не секрет, то чем именно на данный момент ограничены ваши знания в данной области? Почему я спрашиваю: как мне кажется, я не использовал каких-либо особенных техник (разве что, статическую функцию) при решении задачи. Основной упор здесь идет в алгоритм и понятие "простые числа".

Все же, если будет необходимо, то я могу разъяснить некоторые конструкции.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг