Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.06.2017
Сообщений: 16
1

Методы и приведение типов, объясните пару моментов

12.10.2017, 16:36. Показов 741. Ответов 6

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите разобраться с кодом.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class ChkNum
    {
        // Возвратить значение true, если значение
        // параметра х окажется простым числом.
        public bool IsPrime(int x)
        {
            if (x <= 1) return false;
for (int i = 2; i <= x / i; i++)
                if ((x % i) == 0) return false;
            return true;
        }
    }
    class ParmDemo
    {
        static void Main() // 4) в С# данный метод считается началом и без него невозможно что либо делать ?
        {
          ChkNum ob = new ChkNum(); // 1) обязательно ли создавать объект ?
          for (int i = 2; i < 10; i++)
          if (ob.IsPrime(i)) Console.WriteLine(i + " простое число.");
          else Console.WriteLine(i + " непростое число.");
          byte b = 10;
b = (byte)(b * b); // 2) зачем здесь(byte) ?Любое выражение всегда вычисляется как int и всегда требуется перевод обратно?
            Console.WriteLine("b будет равно " + b);
            Console.ReadKey();
 
        }
    }
Результат будет:
2 простое число.
3 простое число.
4 непростое число 3) почему ? Ведь согласно циклу и этому фрагменту if ((x % i) == 0) здесь x и i будут равны 4 и (4%4)= 0, но тогда почему возвращает false ?
...
b будет равно 100
P.S. код взят из книги "Герберт Шилдт - C# 4.0. Полное руководство - 2011".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2017, 16:36
Ответы с готовыми решениями:

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, &quot;Полный справочник по C#&quot;), и нашел такое (ст. 77) Поскольку при...

Приведение типов
Подскажите как сделать так, чтобы в теле цикла не выдавало ошибку. не пойму как можно преобразовать...

Приведение типов
Добрый день! Никак не могу сообразить возможно ли создать класс в котором есть переменная типа...

Приведение типов
Имеется List&lt;ObjectContainer&lt;AlmanacGps&gt;&gt; Нужно привести его к List&lt;ObjectContainer&lt;IAlmanac&gt;&gt; ...

6
3 / 3 / 3
Регистрация: 12.10.2017
Сообщений: 35
12.10.2017, 16:39 2
Напишы задачу
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.10.2017, 16:44 3
Цитата Сообщение от librain Посмотреть сообщение
здесь x и i будут равны 4
Сначала 4 и 2, но 4%2=0, поэтому и false (нашлось число 2 на которое 4 делится без остатка)
1
3 / 3 / 3
Регистрация: 12.10.2017
Сообщений: 35
12.10.2017, 16:47 4
в чем суть задачи? найти простие числа???
0
Эксперт .NET
5877 / 4754 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
12.10.2017, 16:54 5
Цитата Сообщение от librain Посмотреть сообщение
1) обязательно ли создавать объект ?
Если метод статический, то не нужно, он вызывается от имени класса. Для экземплярных методов объект нужен.
Цитата Сообщение от librain Посмотреть сообщение
2) зачем здесь(byte) ?Любое выражение всегда вычисляется как int
Не любое, но это вычисляется, как int
Цитата Сообщение от librain Посмотреть сообщение
4) в С# данный метод считается началом и без него невозможно что либо делать ?
Да, это точка входа в программу.
1
Администратор
Эксперт .NET
17689 / 13817 / 5310
Регистрация: 17.03.2014
Сообщений: 28,329
Записей в блоге: 1
12.10.2017, 17:05 6
Цитата Сообщение от librain Посмотреть сообщение
// 1) обязательно ли создавать объект ?
В данном примере да. Потому что метод IsPrime экземплярный

Цитата Сообщение от librain Посмотреть сообщение
// 2) зачем здесь(byte) ?Любое выражение всегда вычисляется как int и всегда требуется перевод обратно?
Арифметические операции определены для типов int, uint, long, ulong. Если в выражении есть другие типы, то они сначала приводятся к одному типу с самым большим диапазоном значений из списка выше. Результат операции будет иметь тот же тип. В данном случае byte неявно приводится к int и затем требуется явное приведение обратно в byte.

Цитата Сообщение от librain Посмотреть сообщение
3) почему ?
Потому что условие if (4 % 4 == 0) дает "истину"

Цитата Сообщение от librain Посмотреть сообщение
// 4) в С# данный метод считается началом и без него невозможно что либо делать ?
Да
1
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
12.10.2017, 17:25 7
Цитата Сообщение от librain Посмотреть сообщение
4 непростое число 3) почему ?

Простое число — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.
4 делится на 1,2,4 следовательно при делении 4 на 2 остатка не будет

и согласно Вашему циклу i до 4 не доберётся:

for (int i = 2; i <= x / i; i++)

при x = 4 первый цикл получится так:

i = 2 -> i <= 4/ 2 = 2

выполниться проверка, остаток от деления равен 0, вернёт false
1
12.10.2017, 17:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2017, 17:25
Помогаю со студенческими работами здесь

Приведение типов
Добрый день. Столкнулся вот с такой строкой в коде ...

Приведение типов
Здравствуйте, дамы и господа, наверное я совсем чего-то не понимаю, но вот такой элементарный...

Приведение типов
Проблема с приведениями типов public abstract class A&lt;T&gt; where T : B{} public class...

Приведение типов
Здравствуйте. Есть задание:Даны два массива X и Y одинакового размера. Найти i, при котором...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru