Diskusia – 4. diel - Viacrozmerné polia v C# .NET
SpäťUpozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.


David Hartinger:9.4.2019 16:21
Cituji článek:
samozřejmě si to můžeme určit i obráceně, např. matice v matematice se zapisují opačně
Takže ne, nemáme.
Ahoj, díky za článek.
Chtěl bych se zeptat, jak lze lépe vyřešit výpis zubatého pole než jsem
to udělal já. Nevím jak vypsat po řádcích pole, které má proměnnou
délku sloupce, proto jsem to vypisoval po sloupcích, které jsem vypsal do
řádku.
// Zkrácená inicializace vícerozměrných polí
int[][] zubatePole = new int[][]
{
new int[] {15, 2, 8, 5, 3},
new int[] {3, 3, 7},
new int[] {9, 1, 16, 13},
new int[] {},
new int[] {5}
};
// Získání velikosti pole
int sloupcu = zubatePole.Length;
int[] radku = new int[zubatePole.Length];
for (int i = 0; i < zubatePole.Length; i++)
{
if (sloupcu != 0)
{
radku[i] = zubatePole[i].Length;
}
}
// Výpis
for (int j = 0; j < sloupcu; j++)
{
Console.Write("Sloupec {0}: ", j);
for (int i = 0; i < radku[j]; i++)
{
Console.Write(zubatePole[j][i].ToString().PadLeft(3));
}
Console.WriteLine();
}
Console.ReadKey();
Parádní článek, děkuji!
Ahoj,
neměl by být kód spíše takovýto:
int[, ,] kinosaly = new int [4, 4, 3];
aby odpovídal obrázku https://www.itnetwork.cz/…/3d_pole.png ?
Ahoj, prosím jak je následující citát myšlen?
První číslice udává počet sloupců, druhá počet řádků (samozřejmě si to můžeme určit i obráceně, např. matice v matematice se zapisují opačně).
C# Multidimensional Arrays tady je jasně řečeno, že se to
zapisuje opačně, což jsem si ve VS ověřil.
Ahoj, super článek!
Hned jsem zkoušel vícerozměrná pole využít pro Morseův
kodér/dekodér.
Aplikace automaticky rozeznává text a morseovku, dále rozeznává všechny
standardizované znaky (včetně @) a speciální signály.
Tady je výsledek:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace _074_MorseCode2
{
class Program
{
static void Main(string[] args)
{
//výpis názvu aplikace
Console.ForegroundColor = ConsoleColor.DarkCyan; //nastavení tamě tyrkysové barva textu
Console.WriteLine("**************"); //rámeček
Console.Write("* "); //rámeček
Console.ForegroundColor = ConsoleColor.Green; //nastavení zelené barva textu
Console.Write("MORSE CODE"); //název aplikace
Console.ForegroundColor = ConsoleColor.DarkCyan; //nastavení tamě tyrkysové barva textu
Console.WriteLine(" *"); //rámeček
Console.WriteLine("**************"); //rámeček
//deklarace vzorových polí
string[][] charakters = new string[][] {
//latinka bez diakritiky, arabské číslice, interpunkce
new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", ".", ":", ";", "?", "!", "-", "/", "+", "=", "_", "\"", "(", ")", "'", "@", " " },
//odpovídající znaky v morseovce
new string[] { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", "--..--", ".-.-.-", "---...", "-.-.-.", "..--..", "--...-", "-....-", "-..-.", ".-.-.", "-...-", "..--.-", ".-..-.", "-.--.", "-.--.-", ".----.", ".--.-.", "" }
};
string[][] specialSignals = new string[][] {
//speciální signály latinkou
new string[] { "zacatek vysilani", "konec vysilani", "nerozumim", "rozumim", "pomaleji", "cekejte", "omyl", "opakuji", "sos" },
//speciální signály morseovkou
new string[] { "-.-.-.-.", "...-.-", ".......", "----.-", "-.-.-..", ".-...", ". . . . . .", ".. .. .. .. .. ..", "...---... " },
//ekvivalenty speciálních signálů po překódování z latinky
new string[] { "--.. .- -.-. .- - . -.- ...- -.-- ... .. .-.. .- -. ..", "-.- --- -. . -.-. ...- -.-- ... .. .-.. .- -. ..", "-. . .-. --- --.. ..- -- .. --", ".-. --- --.. ..- -- .. --", ".--. --- -- .- .-.. . .--- ..", "-.-. . -.- . .--- - .", "--- -- -.-- .-..", "--- .--. .- -.- ..- .--- ..", "... --- ... " },
//ekvivalety speciálních signálů překódovaných z morseovky
new string[] {"eeeeee", "iiiiii"}
};
string[,] diacriticalChars = new string[,] {
//znaky s diakritikou
{ "á", "č", "ď", "é", "ě", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž" },
//ekvivalenty znaků bez diakritiky
{ "a", "c", "d", "e", "e", "i", "n", "o", "r", "s", "t", "u", "u", "y", "z" }
};
//vytvoření regulárního výrazu pro zjištění jestli jde o morseovku
Regex r = new Regex("[a-z0-9,!?:;+-/@()=]");
//cyklus pokrčování programu
bool toContinue = true; //deklarace řídící proměnné pro pokračování programu
while (toContinue) //dokud je v continue true bude opakovad chod programu
{
//reset barev
Console.ResetColor();
//načtení zprávy ke zpracování
Console.ForegroundColor = ConsoleColor.Green; //nastavení tmavě zelené barvy textu
Console.Write("\nZadejte zprávu ke zpracování: "); //výpis textu
Console.ResetColor(); //nastavení bílé barvy textu
string message = Console.ReadLine().Trim().ToLower(); //deklarace proměnné + uložení vstupu od uživatele + ustřihnutí mezery před a za řetězcem + převod řetězce na malé znaky
//automatické rozpoznání textové a morseovy zprávy + zpracování
if (r.IsMatch(message)) //pokud jde o zprávu textovou
{
//incializace proměnné pro uložění zakódované zprávy
string morseCodeMessage = "";
//cyklus nahrazujicí diakritické znaky nediakritickými
for (int i = 0; i < diacriticalChars.GetLength(1); i++)
{
message = message.Replace(diacriticalChars[0, i], diacriticalChars[1, i]);
}
//výpis upravené zprávy
Console.ForegroundColor = ConsoleColor.Green; //nastavení tmavě zelené barvy textu
Console.Write("Vaše zpráva po úpravě k převodu do morseovky: ");
Console.ResetColor(); //nastavení bílé barvy textu
Console.WriteLine(message);
//založení pole pro uložení jednotlivých znaků zprávy
string[] messageCharakters = new string[message.Length]; //založí pole s velikostí podle délky zprávy
//rozbití zprávy na jednotlivé znaky
for (int i = 0; i < message.Length; i++) //pro všechny pozice v poli
{
messageCharakters[i] = message[i].ToString(); //vloží znak převedený na string z pozice i v message na pozici i v poli charakters
}
//iterace znaky abecedy čisel a interpunkce
foreach (string alphabeticChar in messageCharakters) //pro každý znak v poli znaka
{
string morseCodeChar = "#"; //deklarace proměnné + uložení výchozího znaku - použije se pokud znak není ve vzorovém poli
int index = Array.IndexOf(charakters[0], alphabeticChar); //deklarace proměnné + uložení indexu pozice znaku ve vzorovém poli
if (index >= 0) //pokud je znak nalezen ve vzorovém poli
{
morseCodeChar = charakters[1][index]; //vložení znaku ze vzorového pole do proměnné morseCodeChars
}
morseCodeMessage += morseCodeChar + " "; //přičte do zprávy znak
}
//cyklus nahrazující sekvenci znaků za zvláštní signál
for (int i = 0; i < specialSignals[2].Length; i++)
{
if (morseCodeMessage.Contains(specialSignals[2][i])) //pokud najde sekvenci znaků v pomocném poli
{
morseCodeMessage = morseCodeMessage.Replace(specialSignals[2][i], specialSignals[1][i]); //nahrazení přeložené sekvence standardizovanými sekvencemi
}
}
//výpis morseovy zprávy
Console.ForegroundColor = ConsoleColor.Green; //nastavení tmavě zelené barvy textu
Console.Write("Zakódovaná zpráva: ");
Console.ForegroundColor = ConsoleColor.DarkCyan; //nastavení tmavě tyrkysové barvy textu
Console.WriteLine(morseCodeMessage);
}
else //pokud jde o zprávu v morseovce
{
//deklarace proměnné pro uložení dekódované zprávy
string alphabeticMessage = "";
//rozbití zprávy na jednotlivé znaky
string[] messageCharakters = message.Split(' ');
//iterace znaky morseovky
foreach (string morseCodeChar in messageCharakters) //pro každý morseův znak v poli messageCharakters
{
string alphabeticChar = "#"; //deklarace proměnné + uložení výchozího znaku - použije se pokud znak není ve vzorovém poli
int index = Array.IndexOf(charakters[1], morseCodeChar); //deklarace proměnné + uložení indexu pozice znaku ve vzorovém poli
if (index >= 0) //pokud je znak nalezen ve vzorovém poli
{
alphabeticChar = charakters[0][index]; //vložení znaku ze vzorového pole do proměnné alphabeticChar
}
else //pokud není nalezen znak v poli alphabetNumericChars
{
index = Array.IndexOf(specialSignals[1], morseCodeChar); //uložení indexu pozice speciálního signálu
if (index >= 0) //pokud je znak nalezen ve vzorovém poli
{
alphabeticChar = specialSignals[0][index]; //vložení speciálního signálu
}
}
alphabeticMessage += alphabeticChar; //přičte do zprávy znak
}
//kontrola speciálního signálu omyl
if (alphabeticMessage.Contains("eeeeee")) //pokud dekódovaná zpráva obsahuje sekvenci znaků signálu omyl
{
alphabeticMessage = alphabeticMessage.Replace("eeeeee", "omyl"); //nahradí sekvenci slovem
}
//kontrola speciálního signálu opakuji
if (alphabeticMessage.Contains("iiiiii")) //pokud dekódovaná zpráva obsahuje sekvenci znaků signálu opakuji
{
alphabeticMessage = alphabeticMessage.Replace("iiiiii", "opakuji"); //nahradí sekvenci slovem
}
//výpis dekódované zprávy
Console.ForegroundColor = ConsoleColor.Green; //nastavení tmavě zelené barvy textu
Console.Write("Dekódovaná zpráva: ");
Console.ForegroundColor = ConsoleColor.DarkCyan; //nastavení tmavě tyrkysové barvy textu
Console.WriteLine(alphabeticMessage);
}
//cyklus hlídající platnost vstupu od uživatele
bool validChoice = false; //deklarace + nastavení hodnoty řídící proměnné
while (!validChoice) //dokud validChoice není nastaveno na true
{
//dotaz na pokračování
Console.ForegroundColor = ConsoleColor.Green; //nastavení tmavě zelené barvy textu
Console.Write("Chcete pokračovat další zprávou? [a/n]: ");
Console.ResetColor();
switch (Console.ReadKey().KeyChar.ToString().ToLower())
{
default:
Console.ForegroundColor = ConsoleColor.Red; //nastavení červené barvy
Console.WriteLine("\nNeplatná volba!");
break;
case "a":
validChoice = true;
toContinue = true;
break;
case "n":
validChoice = true;
toContinue = false;
break;
}
//odřádkování
Console.WriteLine();
}
}
//výzva k ukončení aplikace
Console.ForegroundColor = ConsoleColor.DarkCyan; //nastavení tyrkysové barvy textu
Console.WriteLine("\nDěkuji za použití aplikace MORSE CODE. Aplikaci ukončíte stiskem libovolné klávesy.");
//čekání na stisk klávesy
Console.ReadKey();
}
}
}
Václav Dachs:22.3.2021 8:36
Koukám, že jsem přehlédl nějaké chybky v komentářích, které
vznikly, když mi do jejich psaní zasahoval synátor no co už
Václav Dachs:6.4.2021 21:28
Já výpis zubatého pole řešil takto:
//deklarace a inicializace zubatého pole
int[][] zubatePole = new int[][] {
new int[] {15,2,8,5,3},
new int[] {3,3,7},
new int[] {9,1,16,13},
new int[] {},
new int[] {5}
};
//výpis zubatého pole vodorovně
Console.WriteLine("\nVýpis zubatého pole:");
for (int i = 0; i < zubatePole.Length; i++) { //zubatePole.Length vrátí počet polí v poli
//výpis obsahu každého pole v poli
Console.Write($"Sloupec {i}:");
for (int j = 0; j < zubatePole[i].Length; j++) //zubatePole[i].Length vrátí počet položek v aktuálním poli
Console.Write(zubatePole[i][j].ToString().PadLeft(3)); //výpis položky
Console.WriteLine(); //odřádkování
}
Václav Dachs:6.4.2021 22:08
případně ještě výpis pole svisle:
//deklarace a inicializace zubatého pole
int[][] zubatePole = new int[][] {
new int[] {15,2,8,5,3},
new int[] {3,3,7},
new int[] {9,1,16,13},
new int[] {},
new int[] {5}
};
Console.WriteLine("\nVýpis zubatého pole svisle:");
int zarovnani = 5;
//zjištění indexu nejdelšího pole v poli
int index = 0;
for (int i = 0; i < zubatePole.Length; i++) {
if (zubatePole[i].Length > index)
index = i;
}
//výpis
for (int j = 0; j < zubatePole[index].Length; j++) {
for (int i = 0; i < zubatePole.Length; i++) {
if (j < zubatePole[i].Length)
Console.Write(zubatePole[i][j].ToString().PadLeft(zarovnani));
else {
for (int k = 0; k < zarovnani; k++)
Console.Write(" ");
}
}
Console.WriteLine();
}
//ukončení aplikace
Console.ReadKey();
Zobrazené 10 správy z 34.