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

Г.Шилдт C# 4.0. Полное руководство. Разбор примера работы с массивом

28.11.2017, 19:26. Показов 2782. Ответов 3

Author24 — интернет-сервис помощи студентам
Доброго времени суток форумчане! Не давно начал изучать творения данного автора. Столкнулся с непониманием его программы по двумерным массивам. На стр. 182-183 он приводит пример программы где с начало массив заполняется числами от 1 до 12, а затем выводится его содержимое.

Код
// Продемонстрировать двумерный массив.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System;
class TwoD {
  static void Main() {
    int t, i; 
    int[,] table = new int[3, 4];
    for(t=0; t < 3; ++t) {
      for(i=0; i < 4; ++i) {
        table[t,i] = (t*4)+i+1;
        Console.Write(table[t,i] + " ");
      }
      Console.WriteLine();
    }
  }
}
.


Помогите разжевать)
Если я правильно понимаю, то, при в ходе в первый цикл переменная t инкрементируется в префиксной форме, а соответственно становиться равно 1. То же самое происходит и со вложенным циклом переменной i.
В этом участке table[t,i] значения переменных передается правому и левому индексам массива соответственно(указываем к какому элементу массива делаем обращение), а здесь = (t*4)+i+1 присваиваем значение выражение к указанному элементу массива.
Тут у меня возник вопрос! Если при первом прогоне циклов переменные t и i становятся равным 1 то, исходя из формулы (t*4)+i+1 получается (1*4)+1+1=6. От куда берутся числа от 1 до 5? Так же я понимаю что вложенный цикл for выполнится 4 раза затем, программа вернется к первому циклу for и так 3 раза. Я не могу понять как вычисляются в этом алгоритме правильные индексы массива и в дальнейшем заполняются от 1 до 12? Так же интересно, если поменять форму инкрементов на постфиксную, программа отработает и все ячейки будут заполнены правильно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2017, 19:26
Ответы с готовыми решениями:

Отличия между книгами Г.Шилдт - C# 3.0 Полное руководство и C# 4.0
Доброго времени суток! Какие отличия между книгами Г.Шилдт - C# 3.0 Полное руководство и C# 4.0 ?...

Строковые литералы, Шилдт Г. - Java 8. Полное руководство - 2015
Шилдт Г. - Java 8. Полное руководство 2015г. страница 86 : &quot;Управляющие символы и восьмеричная или...

Исходники программ с книги Герберт Шилдт - C# 4.0. Полное руководство
Где скачать исходники программ с книги Герберт Шилдт - C# 4.0. Полное руководство ? Самое...

Разбор примера работы побитового И
Здравствуйте, в процессе моего изучения побитовых операций возникли некоторый вопросы, на которые...

3
Эксперт .NET
5531 / 4296 / 1216
Регистрация: 12.10.2013
Сообщений: 12,330
Записей в блоге: 2
28.11.2017, 19:48 2
Цитата Сообщение от bla2202 Посмотреть сообщение
Помогите разжевать)
bla2202, посмотрите простой пример ниже.
Если коротко, то разница в пре/постфиксном операторе проявляется, когда переменная используется в выражении. При префиксе переменная сначала изменяется, а потом используется, а при постфиксе переменная сначала используется, а потом изменяется. Если же она просто используется как счетчик цикла, никакой разницы нет.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication7 {
    class Program {
        static void Main(string[] args) {
            for (int i = 0; i < 5; i++) {
                Console.WriteLine("i={0}", i);
            }
            Console.WriteLine();
            for (int j = 0; j < 5; ++j) {
                Console.WriteLine("j={0}", j);
            }
            int n = 9;
            int r1 = 5 + ++n;
            int m = 9;
            int r2 = 5 + m++;
            Console.WriteLine("r1={0}", r1);
            Console.WriteLine("r2={0}", r2);
            Console.ReadLine();
        }
    }
}
2
0 / 0 / 0
Регистрация: 11.11.2015
Сообщений: 5
28.11.2017, 23:35  [ТС] 3
Цитата Сообщение от insite2012 Посмотреть сообщение
Если же она просто используется как счетчик цикла, никакой разницы нет
Спасибо, вот это я видимо в книги упустил. Я еще читал что при * на ноль, программа будет выдавать ошибку, и это так же стало проблемой для меня. Я думал что если переменная t=0 а затем эта переменная (0*4), будет выдавать ошибку, и дальше выражение выполняться не будет, а оказалось что это не так)))
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
29.11.2017, 00:35 4
откуда такие умозаключения про умножение на ноль? тут все как в обычной "школьной ариХметике" на ноль !!!делить!!! нельзя, остальное с нулем делать можно
1
29.11.2017, 00:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2017, 00:35
Помогаю со студенческими работами здесь

C# 7.0. Справочник. Полное описание языка Герберт Шилдт
Увидел книгу C# 7.0. Справочник. Полное описание языка и хотел услышать мнения от тех кто её...

Актуальность C# 4.0. Полное руководство
Всем привет, помогитепожайлуста маслёнку. Начал недавно изучать С# и решил начать с книги. После...

Исходники кода для книги Java 8 (2015) Шилдт - руководство для начинающих
Там код иногда странные ошибки возникают особенно UNicode сбивается , не могу нормально точь в точь...

Стеганография в BMP. Полное руководство
СТЕГАНОГРАФИЯ в BMP ИЗОБРАЖЕНИЯХ Данная статья содержит готовый проект с подробным описанием...


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

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