woonem
@woonem

Как перейти с PHP на C# (не по стандартным учебникам)?

Недавно на олимпиаде была задача, где нужно перебирать числа от 100 до 999, суммировать цифры каждого числа.
Также в задачах мне были нужны функции array_merge() и array_unique().

На PHP первую задачу можно решить так:
<?php
for($i=100; $i<=999; $i++){
Si=(string)$i; //в C# не получается явное преобразование
$sum[]=$i{0}+$i{1}+$i{2}; //в C# нет возможности выбирать букву из строки, по крайней мере, я не обнаружил
}
print_r($sum); //это не обязательно, просто чтоб код не был пустышкой
?>


Про мусор хотелось бы узнать.
И как переходить с функционального языка на ОО?
Вообщем все проблемы, которые встречаются у привыкших к комфорту в PHP людей при переходе на нормальные ЯП хотелось бы изучить.
Я конечно понимаю, что PHP для детей, поэтому там куча функций для упрощения работы, но хотелось бы быстро и безболезненно научиться писать полноценные программы на C#, а не просто выучить синтаксис и некоторые особенности.
  • Вопрос задан
  • 2580 просмотров
Решения вопроса 1
@Melz
Почитать наверное все-таки придется.

1. Ваш print_r($sum) по идее должен выбросить хотя бы варнинг тк вы создали $sum в цикле, а пользуетесь им вне цикла. В шарпах он там не будет существовать.

2. В шарпах есть типы. Создавать числа как строки никто не будет. Смыла нет. Так же нет смысла преобразовывать число обратно в строку.

Создать список с числами (не строками) от 100 до 999.
var numberList = Enumerable.Range(100, 999).ToList();

Не надо конвертировать число в строку (ваш метод так себе). Надо использовать остаток от деления на 10. Для 650 вернет 11.
int sum = 0;
for (int n = x; n > 0; sum += n % 10, n /= 10);

На олимпиадах ненавидят Linq :D
Весь ваш пример, включая генерацию списка. Сохраняет сумму в новый список.
var numberList = Enumerable.Range(100, 999).ToList();
            var result = numberList.Select(x =>
            {
                int sum = 0;
                for (int n = x; n > 0; sum += n % 10, n /= 10);
                return sum;
            });
            ;
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
nki
@nki
bezkart.ru готовая система лояльности
в C# не получается явное преобразование

Метод ToString() давно отменили?
Ответ написан
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Читайте документацию и книги. И решайте задачки.
Вы должны понимать, что такое строгая типизация.

Найти все цифры 3х-значного числа можно используя остаток от деления.
Для того, чтобы понимать эти принципы - важно какое-то время пописать программы на строго типизированном языке. Я в свое время писал на Pascal — этого было достаточно, чтобы понять многие вещи.
Ответ написан
Комментировать
@dotfinal
getting start
PHP для детей не потому, что там много библиотечных функций.
Напиши какой-нибудь маленький проект на С# и .NET
Если интересует мобильная разработка, для интереса можешь попробовать на Xamarin пописать.
Ответ написан
Комментировать
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Найдите себе "учителя" (на фрилансим.ру и прочих сайтах) и пишите ему в скайп по каждому вопросу, возникающему в процессе написания программы.
Это быстро и безболезненно, но стоит денег.
Ответ написан
@asd111
List<int> sum_array = new List<int>();
for(int i = 100; i <= 999; i++) {
    string text_numbers = i.ToString();
    var sum_of_elements = Int32.Parse(text_numbers[0]) + Int32.Parse(text_numbers[1]) + Int32.Parse(text_numbers[2]) ;
    sum_array.Add(sum_of_elements);
}
Console.WriteLine("[{0}]", string.Join(", ", sum_array));
Ответ написан
Комментировать
Schullz
@Schullz
=^.^=
В вопросе упоминается какая-то олимпиада. Так вот, на олимпиадах C# очень редко используется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы