Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вопросы по C#

975  1 2 3 все
Mahone постоялец25.10.13 16:35
25.10.13 16:35 
Всем привет!
Сейчас в универе изучаю C#. Ранее с программированием не сталкивался, но большая часть мне пока понятна.
По этой небольшой непонятной части и возник вопрос сейчас, поэтому буду благодарен наставлению на путь истинный!
Дано задание: вывести на консоль все простые числа до 1000.
Выполнил с использованием метода так:
using System;
class PruefungDerZahl
{
// This Method returns TRUE, if the number saved in variable "zahl" is prime
static bool istPrimzahl(int zahl)
{
// Checks if the number saved in variable "zahl" can be divided by numbers
// starting from 2 to ("zahl" - 1) without the rest. If no - returns TRUE.

for (int j = 2; j < zahl; j++)
if ((zahl % j) == 0)
return false;
return true;
}
static void Main()
{
// Takes the numbers from 2 to 1000 and saves to the variable "i"
for (int i = 2; i <= 1000; i++)
{
// Sends the value of variable "i" to the variable "zahl" of the method istPrimzahl
// If the method istPrimzahl returns TRUE, then writes the number on the screen

Console.Write(istPrimzahl(i) ? i + "\t" : "");
}
Console.ReadLine();
}
}

Теперь хочу выполнить это же задание БЕЗ использования метода, используя один for в другом, но не понимаю как реализовать.

using System;
class PruefungDerZahl
{
static void Main()
{
bool prim = true;
// Берем значение от 2 до 1000, сохраняем в i
for (int i = 2; i <= 1000; i++)
{
// Для каждого значения i проверяется деление без
// остатка на числа от 2 до i/2

for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
prim = false;
}
}
}
}
}


Пытался сделать так: если число делится без остатка false, с остатком true. Но не понял, как реализовать проверку деления одного значения i на ВСЕ j, при этом, если хоть при одном значении j модуло == 0, возвращается false и число не выводится на экран. Если true, то число i выводится на экран 1 раз после перебора всех делителей j.
Натолкните на мысль, в какую сторону двигаться?
Спасибо!

#1 
Murr патриот25.10.13 17:04
Murr
NEW 25.10.13 17:04 
в ответ Mahone 25.10.13 16:35
Натолкните на мысль, в какую сторону двигаться?
-----
Как ни странно - Перестать делать так как написано в учебнике...
В том смысле, что <i> & <j> - используются не как индексы, а как значимые значения и должны иметь понятные названия.
// Берем значение от 2 до 1000, сохраняем в и
-----
Хммм... тут что-то не так... пока не понятно - не понимание или неумение изложить
// остатка на числа от 2 до и/2
<for (int j = 2; j < i; j++)>
-----
Написано - правильно, но... не делается как написано.
#2 
Mahone постоялец25.10.13 17:09
NEW 25.10.13 17:09 
в ответ Murr 25.10.13 17:04, Последний раз изменено 25.10.13 17:14 (Mahone)
In Antwort auf:
// остатка на числа от 2 до и/2
<for (int j = 2; j < i; j++)>
-----
Написано - правильно, но... не делается как написано.

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

In Antwort auf:

неумение изложить


#3 
Tomasson ёшик25.10.13 17:39
Tomasson
NEW 25.10.13 17:39 
в ответ Mahone 25.10.13 16:35
В ответ на:
Натолкните на мысль, в какую сторону двигаться?

оставить метод istPrimzahl(int zahl) в коде.
Несколько замечаний:
1. Лучше использовать английский язык в коде;
2. Как уже написал Мурр, переменные должны иметь смысловые названия. Например, поменять j на divisor.
3. Метод istPrimzahl написан в плохом стиле. Для for и if нужно добавить фигурные скобки.
4. Лишний вывод в консоль, если число не является простым. Заменить Console.Write(istPrimzahl(i) ? i + "\t" : ""); на
if (istPrimzahl(i))
{
Console.Write(i.ToString() + "\t");
}

5. for (int j = 2; j <= i/2; j++)

#4 
  Posmotrim постоялец25.10.13 17:42
Posmotrim
NEW 25.10.13 17:42 
в ответ Mahone 25.10.13 16:35
            for (int i = 2; i <= 1000; i++)
{
bool prim = true;
// Для каждого значения i проверяется деление без
// остатка на числа от 2 до i/2
for (int j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
prim = false;
break;
}
}
if (prim)
{
Console.WriteLine(i);
}
}


#5 
anly коренной житель25.10.13 17:48
anly
NEW 25.10.13 17:48 
в ответ Mahone 25.10.13 16:35
В ответ на:
Теперь хочу выполнить это же задание БЕЗ использования метода, используя один for в другом, но не понимаю как реализовать.
по-моему мнению, чем меньше вложенных циклов, тем лучше. Поэтому вложенный цикл лучше скрыть в функции, как уже сдалано. Зачем учиться плохому?!
Проклят нарушающий межи ближнего своего (Втор.27:17)
#6 
Tomasson ёшик25.10.13 17:50
Tomasson
NEW 25.10.13 17:50 
в ответ Posmotrim 25.10.13 17:42, Последний раз изменено 25.10.13 17:55 (Tomasson)
вот это bool prim = true; мне режeт глаз :-)
#7 
  Posmotrim постоялец25.10.13 17:59
Posmotrim
NEW 25.10.13 17:59 
в ответ Tomasson 25.10.13 17:50
вот это bool prim = true; мне режeт глаз :-)

херни я какой-то написал ))

#8 
Mahone постоялец25.10.13 18:06
NEW 25.10.13 18:06 
в ответ Posmotrim 25.10.13 17:59, Последний раз изменено 25.10.13 18:07 (Mahone)
Спасибо! Оказалось, что я просто не в правильное место вставлял bool prim = true
Вообще, мне и самому больше нравится через метод делать это задание, но хотел для практики и знаний попробовать сделать без метода.
Томассон, спасибо за рекомендации!
#9 
AlexNek патриот25.10.13 18:13
AlexNek
NEW 25.10.13 18:13 
в ответ Mahone 25.10.13 16:35
Есть еще такая полезная вещь как Programming style guide
Обратить внимание на наименование различных частей программы и расстановку скобок. Там же обычно есть упоминание о том, что у функции должен быть один return.
Прочитать про решето Эратосфена на будущее.
Забыть про комментарии типа этого
"// Takes the numbers from 2 to 1000 and saves to the variable "i""
возле цикла. И когда я вижу слово Save у меня никогда не возникнет мысли что сохранение происходит в переменную
Вот еще очень полезный коммент, как жалко что подобных комментов мало в программах
//сохраняем число 5 в целой константе Мах
const int Max=5;
#10 
Mahone постоялец26.10.13 19:58
NEW 26.10.13 19:58 
в ответ AlexNek 25.10.13 18:13, Последний раз изменено 26.10.13 22:10 (Mahone)
Получил новое задание - написать игру 21(не очко) со спичками. Игра тупая: дается 21 спичка, игрок берет от 1 до 4 спичек, потом от 1 до 4 спичек забирает компьютер, кто взял последнюю - тот проиграл. Стратегия компьютера - брать количество спичек 5-(количество_взятое_игроком): 21mod5 = 1, игрок всегда проигрывает
В общем, код такой написал:
using System;
namespace Spiel21
{
class Program
{
static void Main()
{
// Title text
Console.WriteLine("Spiel 21\n ======");
Console.WriteLine("Nimm zwischen 1 und 4 Hölzer. Wer das letzte Holz nimmt, hat verloren.");
Console.WriteLine("Du fängst an.");
// The starting amount of matches is 21
int sumMatches = 21;
Console.Write("Streichhölzer auf dem Tisch: ");

// Prints 21 match on the screen
for (int i = 1; i <= sumMatches; i++)
{
Console.Write("| ");
}
Console.WriteLine();
do
{
int playerMatches;
bool Matches = true;
do
{
// Asks to enter the amount of matches
Console.Write("Wie viele Hölzer nimmst Du: ");
playerMatches = Convert.ToInt32(Console.ReadLine());
// Checks if the amount of matches is from 1 to 4.
// If no, asks to re-enter the amount.

if (playerMatches > 4 || playerMatches < 1)
{
Matches = false;
Console.WriteLine("Falsche Zahl. Wiederhole die Eingabe.");
}
else
{
break;
}
}
while(!Matches);
// Calculates amount of remaining matches and print them on the screen
sumMatches = sumMatches - playerMatches;
Console.Write("\nStreichhölzer auf dem Tisch: ");
for (int i = 1; i <= sumMatches; i++)
{
Console.Write("| ");
}
Console.WriteLine();
// Calculates amount of matches taken by a computer
int compMatches = 5 - playerMatches;
if (compMatches > 1)
{
Console.WriteLine("Ich nehme {0} Hölzer.", compMatches);
}
else
{
Console.WriteLine("Ich nehme {0} Holz.", compMatches);
}
// Calculates amount of remaining matches and print them on the screen
sumMatches = sumMatches - compMatches;
Console.Write("\nStreichhölzer auf dem Tisch: ");
for (int i = 1; i <= sumMatches; i++)
{
Console.Write("| ");
}
Console.WriteLine();
}
// Repeats until there remains only one match
while (sumMatches > 1);
// If there remains only one match, prints that you have lost.
if (sumMatches == 1)
{
Console.WriteLine("\nDu hast VERLOREN!");
}
Console.ReadLine();
}
}
}


Пока не совсем в курсе, как правильно писать комментарии, пишу везде, где покажется нужным.
Вопрос: как в программу, дополнительно к проверке ввода числа от 1 до 4, приписать еще и проверку на то, что вводится именно число, а не буква или символ. В общем, чтобы программа не выдавала ошибку при вводе буквы, а предлагала ввести правильное значение.
Пока нашел такой вариант:

if (!int.TryParse(Console.ReadLine(), out playerMatches))
{
Console.WriteLine("Falsche Zahl. Wiederhole die Eingabe.");
Matches = false;
}


Не понимаю, как этот кусок туда внедрить, ибо переменная playerMatches уже использует Console.ReadLine().

#11 
AlexNek патриот26.10.13 21:24
AlexNek
NEW 26.10.13 21:24 
в ответ Mahone 26.10.13 19:58
В ответ на:
playerMatches = Convert.ToInt32(Console.ReadLine());

А нефиг пользоваться вложенными вызовами
string inputLine = Console.ReadLine()
playerMatches = Convert.ToInt32(inputLine);
#12 
Mahone постоялец26.10.13 22:20
NEW 26.10.13 22:20 
в ответ AlexNek 26.10.13 21:24
Спасибо!! Теперь работает!)
Переделал кусок кода так:
            do
{
int playerMatches;
string inputLine;
bool Matches = true;
do
{
// Asks to enter the amount of matches
Console.Write("Wie viele Hölzer nimmst Du: ");
inputLine = Console.ReadLine();
// Checks if amount of matches is from 1 to 4. Only digits are allowed.
// If no, asks to re-enter the amount.

if (!int.TryParse(inputLine, out playerMatches))
{
Matches = false;
Console.WriteLine("Falsche Zahl. Wiederhole die Eingabe.");
}
else if (playerMatches > 4 || playerMatches < 1)
{
Matches = false;
Console.WriteLine("Falsche Zahl. Wiederhole die Eingabe.");
}
else
{
break;
}
}
while(!Matches);
playerMatches = Convert.ToInt32(inputLine);
// Calculates amount of remaining matches and print them on the screen
sumMatches = sumMatches - playerMatches;


#13 
AlexNek патриот26.10.13 22:36
AlexNek
NEW 26.10.13 22:36 
в ответ Mahone 26.10.13 22:20, Последний раз изменено 27.10.13 12:09 (AlexNek)
В ответ на:
else
{
break;
}
}
while(!Matches);

А это что за бардак?
#14 
Mahone постоялец26.10.13 22:54
NEW 26.10.13 22:54 
в ответ AlexNek 26.10.13 22:36
Без этого break после неверно введенного числа программа начинает циклиться - даже при вводе правильной цифры дальше не идёт.
Можно ли переписать по-другому я не в курсе пока)
#15 
Tomasson ёшик26.10.13 23:11
Tomasson
NEW 26.10.13 23:11 
в ответ Mahone 26.10.13 22:54
посмотри проект в zip файле.
#16 
Mahone постоялец26.10.13 23:21
NEW 26.10.13 23:21 
в ответ Tomasson 26.10.13 23:11
Ну ты круто сделал) я так еще не умею, но посижу, поразбираю код)
#17 
Tomasson ёшик27.10.13 00:10
Tomasson
NEW 27.10.13 00:10 
в ответ Mahone 26.10.13 23:21
это еще не круто :-)
там по идее еще дальше нужно организовывать код. Например, enumeration Player и делать универсальный GameStep с этим параметром.
Избавляться от двойного вызова DrawMatches(matchesCount: matchesRemainder) и т.д.
Но мне уже было лень :-)
#18 
  digital.pilot патриот27.10.13 01:13
digital.pilot
NEW 27.10.13 01:13 
в ответ Mahone 25.10.13 16:35
В ответ на:
остатка на числа от 2 до i/2

достаточно до квадратного корня из i
#19 
AlexNek патриот27.10.13 12:08
AlexNek
NEW 27.10.13 12:08 
в ответ Mahone 26.10.13 22:54
>Без этого break после неверно введенного числа программа начинает циклиться
зачем он нужен не интересует, а вот два различных выхода это всегда фигово. Подумай как использовать тот что есть.
#20 
Mahone постоялец28.10.13 20:26
NEW 28.10.13 20:26 
в ответ AlexNek 27.10.13 12:08, Последний раз изменено 28.10.13 20:28 (Mahone)
Перенес строку playerMatches = Convert.ToInt32(inputLine); внутрь else, вот так:
                    else
{
playerMatches = Convert.ToInt32(inputLine);
break;
}
}
while(!Matches);


Честно говоря, не понимаю, то там за два выхода

#21 
Mahone постоялец28.10.13 20:59
NEW 28.10.13 20:59 
в ответ Mahone 28.10.13 20:26
Сегодня решал задачи для следующего Юбунга, написал такую программку, которая при вводе числа показывает на какие числа оно делится или сообщает, что оно простое число.
        static void Main()
{
int number;
int divider;
string input;
bool prim = true;
Console.Write("Geben Sie eine Zahl ein: ");
input = Console.ReadLine();
number = Convert.ToInt32(input);

for (divider = 2; divider <= number / 2; divider++)
{
if (number % divider == 0)
{
prim = false;
}
}
if (prim)
{
Console.Write("{0} ist eine Primzahl", number);
}
else if (!prim)
{
Console.Write("{0} ist teilbar durch ", number);
for (divider = 2; divider <= number / 2; divider++)
{
if (number % divider == 0)
{

Console.Write("{0}, ", divider);
}
}
}
Console.ReadLine();
}


Возможно ли тут как-то избавиться от дублирования

 for (divider = 2; divider <= number / 2; divider++)
{
if (number % divider == 0)
{


и выводить результаты после первого перебора делителей?
Нужно, чтобы текст был различным для простого числа и при выводе делителей:
Geben Sie eine Zahl ein: 100
100 ist teilbar durch 2, 4, 5, 10, 20, 25, 50
Geben Sie eine Zahl ein: 79
79 ist eine Primzahl
Возможно ли при первом переборе делителей передать их значения в Array и выводить эти значения потом в консоль? Сегодня ломал над этим голову, но не придумал как реализовать.

#22 
  Posmotrim постоялец28.10.13 22:22
Posmotrim
NEW 28.10.13 22:22 
в ответ Mahone 28.10.13 20:59
В ответ на:
Возможно ли при первом переборе делителей передать их значения в Array и выводить эти значения потом в консоль? Сегодня ломал над этим голову, но не придумал как реализовать.

Всё как ты сказал:
List<int> dividers = new List<int>();
for (divider = 2; divider <= number / 2; divider++)
{
if (number % divider == 0)
{
dividers.Add(prim);
}
}
if (dividers.Count == 0)
{
Console.Write("ist Primzahl");
}
else
{
Console.Write("ist teilbar durch: " + string.Join(", ", dividers.ToArray()));
}


* нет шарпа под рукой - не могу проверить.

#23 
Tomasson ёшик28.10.13 22:56
Tomasson
NEW 28.10.13 22:56 
в ответ Mahone 28.10.13 20:59, Последний раз изменено 28.10.13 23:01 (Tomasson)
смотри проект в zip файле.
там будут несколько новых для тебя вещей :-)
Nullable Types, Generics, Generic Collections
подробности здесь: http://msdn.microsoft.com/en-us/library/ms123401.aspx
(поиск в верхнем правом углу)
P.S. Вот этого bool prim = true; не должно быть в принципе. Ты еще ничего не знаешь о числе, а какую-то его характeристику уже определяешь как true. Если и использовать такой флаг, то изначальное значение должно быть false.
#24 
Murr патриот29.10.13 04:02
Murr
NEW 29.10.13 04:02 
в ответ Tomasson 28.10.13 22:56
Если и использовать такой флаг, то изначальное значение должно быть фалсе.
-----
Если использовать флаг, то поле должно быть не булевым, а енум... пожалуй на три позиции - не_проверено, простое, не_простое...
Кроме этого, там еще надо добавлять класс-контейнер для тестируемых чисел и другой класс - для простых... идея в том, что бы в массив делителей нельзя было поместить что-то отличное от простого числа, а число нельзя было назвать простым, не выполнив проверку... т.е. создавать только на базе контейнера имеющего тот самый енум-флаг...
Но писать всю эту фигню Я не буду - пусть ТС тренируется...
2ТС: Ты уже понимаешь об чем выше написано?
#25 
  Posmotrim постоялец29.10.13 11:29
Posmotrim
NEW 29.10.13 11:29 
в ответ Tomasson 28.10.13 22:56
В ответ на:
P.S. Вот этого bool prim = true; не должно быть в принципе. Ты еще ничего не знаешь о числе, а какую-то его характeристику уже определяешь как true.
Если и использовать такой флаг, то изначальное значение должно быть false.

тоесть ты считаешь, что:
bool isCompositeNumber = false;


лучше, чем:

bool isPrimeNumber = true;


;-)

#26 
Tomasson ёшик29.10.13 12:12
Tomasson
NEW 29.10.13 12:12 
в ответ Posmotrim 29.10.13 11:29
да 8-)
#27 
  Posmotrim постоялец29.10.13 13:03
Posmotrim
NEW 29.10.13 13:03 
в ответ Tomasson 29.10.13 12:12
имхо важно что в стакане :-P
#28 
MrSanders свой человек29.10.13 18:10
NEW 29.10.13 18:10 
в ответ Murr 29.10.13 04:02
В ответ на:
Но писать всю эту фигню Я не буду - пусть ТС тренируется...

Отличная тренировка, да. Великолепный пример нарушения принципа KISS.
Боюсь представить что надо написать для умножения два на два. :)
#29 
Mahone постоялец29.10.13 18:44
NEW 29.10.13 18:44 
в ответ Posmotrim 28.10.13 22:22
Спасибо, работает!)
Только тут
List<int> dividers = new List<int>();
for (divider = 2; divider <= number / 2; divider++)
{
if (number % divider == 0)
{
dividers.Add(prim);


не prim добавляем в Array, а divider
Кстати, для чего использовать .ToArray или .ToString при выводе значений? Вроде и без этого норм работает.

#30 
Mahone постоялец29.10.13 18:45
NEW 29.10.13 18:45 
в ответ Murr 29.10.13 04:02
In Antwort auf:

2ТС: Ты уже понимаешь об чем выше написано?

Мне надо подумать))
Спасибо!
#31 
  Posmotrim постоялец29.10.13 19:02
Posmotrim
NEW 29.10.13 19:02 
в ответ Mahone 29.10.13 18:44
В ответ на:
Кстати, для чего использовать .ToArray или .ToString при выводе значений? Вроде и без этого норм работает.

метод String.Join<T>(String, IEnumerable<T>) добавили только в 4-й версии фреймворка. Раньше необходимо было передавать вторым параметром массив. Из-за это-то я по старинке использую преобразование.
#32 
Murr патриот30.10.13 01:02
Murr
NEW 30.10.13 01:02 
в ответ MrSanders 29.10.13 18:10
Великолепный пример нарушения принципа КИСС.
-----
Это к моему бывшему шефу - он очень любит делать все просто... и что-то даже работает... местами... иногда... а иногда - не работает... и никто не знает - почему...
А когда надо что-то поменять, то начинаются некоторые трудности... обычные - одно простое поправил - два других, тоже - простых, перестали работать т.к. были рассчитаны на комплиментарность именно с первым простым... и пока все не сделаешь... хммм... сложно - ничего не удастся починить...
При этом в сложном коде... с которым Я не работал лет 5-6 и все основательно подзабыл... все поправилось, расширилось и углубилось без всяких проблем... писанины было правда довольно много, но писанина была простая/техническая и не создавала проблем - просто должен имплементировать то, что должен имплементировать и система говорит что именно должно быть, чего не хватает...
Так что КИСС - КИССом, а констрайнты - констрайнтами...
Боюсь представить что надо написать для умножения два на два. :)
-----
Ну так подумай...
У тебя же задано ограничение - два на два - вот и подумай как _гарантировать_ что и там, и там будут эти самые двойки... :)
#33 
Mahone постоялец12.11.13 18:15
NEW 12.11.13 18:15 
в ответ Mahone 28.10.13 20:26, Последний раз изменено 12.11.13 18:17 (Mahone)
Всем привет!
Сделал очередное задание по программированию и буду рад получить фидбэк, что сделано "коряво" и что можно было бы сделать лучше
Задание такое:
In Antwort auf:
ISBN-13 состоит из 13 цифр, которые разделены на 5 частей: трехзначного префикса (978 или 979), 3 переменно длинных номера, которые означают язык, издательство и заголовок и однозначной проверочной цифры.
Проверочная цифра рассчитывается следующим образом:
Все 12 цифр (без проверочной цифры) умножаются слева направо попеременно на 1 или 3 и суммируются. Сумма делится на 10 и остаток вычитается из 10, это - проверочная цифра. Если остаток 0, то проверочная цифра = 0.
Пример:
ISBN: 978-3-446-42118-9
9+7*3+8+3*3+4+4*3+6+4*3+2+1*3+1+8*3 = 111
111 mod 10 = 1 10-1=9 => проверочная цифра в порядке
Все знаки в строке, которые не являются цифрами (например "–" или знак пробела), пропускаются.

До методов и регулярных выражений мы пока еще не дошли, поэтому их использовать пока не разрешается.
#34 
Murr патриот12.11.13 19:21
Murr
NEW 12.11.13 19:21 
в ответ Mahone 12.11.13 18:15
Вижу - <class Program>.
Не вижу - <class TISBN>, <class TISBNChar>.
Вижу - <if (totalDigits != 12)>
Не вижу - быстрой проверки длинны введенной строки - смотри какие проперти есть у массива.
Не вижу - смысла в числе 12. У меня в коде нет каких-либо цифровых и текстовых констант - полиси не разрешает и весьма правильно - сейчас работаю с кодом где это не соблюдается - головная боль постоянна...
Вижу - <if (char.IsDigit(digitAsChar) == true)>
Не вижу - почему должна выполнятся повторная проверка.
То, что тебе приходится писать довольно громоздкий и сложный для чтения код есть следствие того, что у тебя нет <TISBN> и <TISBNChar>. Подумай как это организовать.
По общему коду - у тебя смешаны хранение данных, ввод данных и какие-то действия с данными. В коде который будет "хорошим" должно быть четкое разделение где, что и как делается. Даже в том случае когда вроде бы можно совместить пару вычислений - все же стоит иметь их отдельно - меньше головной боли будет...
Вопросик на засыпку: <ISBN>, если Я правильно помню, имеет более одного формата. Как будешь решать проблему, если у тебя будут данные с двух внешних источников и в разных форматах?
<P.S.> Цель, как всегда, - научить, а не сделать вместо... научить включает в себя многое, в т.ч. заставить думать над тем как сделать... иногда даже в пустую...
#35 
Mahone постоялец12.11.13 20:50
NEW 12.11.13 20:50 
в ответ Murr 12.11.13 19:21
Спасибо!
#36 
Mahone постоялец21.11.13 16:52
NEW 21.11.13 16:52 
в ответ Murr 12.11.13 19:21
Появился вопрос.
Есть строка, в которой записано число, например "123". Хочу вытащить каждую цифру и засунуть в int array. При использовании foreach (char c in numberAsString) цифры из строки вытаскиваются в ASCII формате и при передаче в int array имеют значения 49,50,51. Функции .toString() и другие конверторы использовать нельзя!
Пока решил задачу таким образом:
foreach (char c in numberAsString)
{
tempString = c - 48;
numberIntArray[arrayPosition] = tempString;
arrayPosition++;
}
Но выглядит нехорошо. Есть ли более "красивые" способы конвертирования без использования встроенных функций?
#37 
  Posmotrim постоялец21.11.13 18:44
Posmotrim
NEW 21.11.13 18:44 
в ответ Mahone 21.11.13 16:52
20 лет назад делали так же как и ты :) только вместо 48 брали '0' - будет понятней.
var array = numberAsString
.Select(n => n - '0')
.ToArray();


#38 
natuerlich blond местный житель21.11.13 19:35
natuerlich blond
NEW 21.11.13 19:35 
в ответ Mahone 21.11.13 16:52
более красивый способ конвертирования - это раскладывание самого числа. последовательно отсекая модуло 10 и деля число на 10.
#39 
  Posmotrim постоялец21.11.13 19:37
Posmotrim
NEW 21.11.13 19:37 
в ответ natuerlich blond 21.11.13 19:35
так число в строке изначально находится =) и конвертировать нельзя.
#40 
natuerlich blond местный житель21.11.13 20:01
natuerlich blond
NEW 21.11.13 20:01 
в ответ Posmotrim 21.11.13 19:37
а, сорри. тады все он правильно сделал, ему же нельзя использовать встроенные функции. с нулем красивее.
#41 
Mahone постоялец21.11.13 20:05
NEW 21.11.13 20:05 
в ответ natuerlich blond 21.11.13 20:01
C делением на 10 и модуло - это вторая часть задания: конвертировать число обратно в строку Так и сделал)
#42 
Murr патриот21.11.13 20:05
Murr
NEW 21.11.13 20:05 
в ответ Mahone 21.11.13 16:52
1. Не уверен, что <char> минус <int> билли переварит правильно.
2. см выше у Посмотрим
3. Я, обычно, делаю табличкой
Проблемы.
Ты не представил определение для <numberIntArray> - там могут быть проблемы.
<tempString> на самом деле не имеет ничего от <string>
#43 
Mahone постоялец21.11.13 21:23
NEW 21.11.13 21:23 
в ответ Murr 21.11.13 20:05, Последний раз изменено 21.11.13 21:24 (Mahone)
Спасибо!
Сделал так:
int arrayPosition = 0;
int[] numberIntArray = new int[numberAsString.Length];
foreach (char c in numberAsString)
{
numberIntArray[arrayPosition] = c - '0';
arrayPosition++;
}


#44 
Murr патриот21.11.13 21:42
Murr
NEW 21.11.13 21:42 
в ответ Mahone 21.11.13 21:23, Последний раз изменено 21.11.13 21:43 (Murr)
Так - можно.
Осталась одна очень существенная проблема.
Постарайся ее найти самостоятельно. Она связана с <c - '0';>
Дополнительно - если вам уже обьясняли что такое системы счисления, то подумай как оно должно выглядеть для <hex>-чисел.
П.С. Я бы не заморачивался с индексом и массивом. Любой контейнер и вперед...
#45 
Mahone постоялец21.11.13 21:53
NEW 21.11.13 21:53 
в ответ Murr 21.11.13 21:42
In Antwort auf:
Она связана с <c - '0';>

Это если там среди цифр в строке будут буквы? На этот случай у меня сделана проверка:
static bool CheckDigits(string numberAsString)
{
foreach (char c in numberAsString)
{
if (!char.IsDigit(c))
{
return false;
}
}
return true;


Если возвращается false, то выдается ошибка и предлагается ввести число заново.
Или не этот случай имеется ввиду?

#46 
Murr патриот22.11.13 11:43
Murr
NEW 22.11.13 11:43 
в ответ Mahone 21.11.13 21:53
Да, именно этот моммент.
#47 
Mahone постоялец26.11.13 18:47
NEW 26.11.13 18:47 
в ответ Mahone 21.11.13 21:53, Последний раз изменено 26.11.13 18:48 (Mahone)
Как правильно писать комментарии к функциям, используя "///" ?
Выводится такой шаблон:

/// <summary>
///
/// </summary>
/// <param name="input"></param>
/// <returns></returns>


Что туда обычно пишут? Похоже на ХТМЛ теги.

#48 
Murr патриот26.11.13 20:01
Murr
NEW 26.11.13 20:01 
в ответ Mahone 26.11.13 18:47
Эти комментарии, в отличии от обычных, транслируются в докоментацию.
#49 
AlexNek патриот28.11.13 21:28
AlexNek
NEW 28.11.13 21:28 
в ответ Mahone 26.11.13 18:47
Загрузи Ghostdoc, а после корректируй ручками
#50 
1 2 3 все