Diskuze: Pole

C# .NET .NET (C# a Visual Basic) Pole American English version English version

Aktivity (1)
Avatar
Jakub Klindera:25.11.2016 20:00

Zdravím, potřebuji poradit ohledně pole. Mám pole 10x10 a chci, aby byly na diagonále jedničky, pod diagonálou násobky dvou a nad diagonálou se bude na každém řádku pokračovat od jedničky výše.

Viz. příloha

Tabulka v excelu je vzor, jak by to mělo vypadat a samotný program je, jak to zatím vypadá. Mám problém udělat ty násobky dvou.

Přikládám ještě celý kód:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Diagonala
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] pole = new int[10, 10]; // řada, sloupec
            naplnPole(pole);
            vypisPole(pole);

            Console.ReadLine();

        }



        private static void naplnPole(int[,] pole)
        {
            for (int i = 0; i < pole.GetLength(0); i++)
            {
                for (int j = 0; j < pole.GetLength(1); j++)
                {


                if (i == j)
                {
                    pole[i, j] = 1;
                }
                else
                {
                    pole[i, j] = 0;

                }

                if (i < j) {
                        pole[i, j] = j + 1 - i;
                    }
                if (i > j)
                    {
                        pole[i, j] = i * 2;
                    }
                }
            }

        }
        private static void vypisPole(int[,] pole)
        {
            for (int i = 0; i < pole.GetLength(0); i++)
            {
                for (int j = 0; j < pole.GetLength(1); j++)
                {
                    Console.Write("{0}\t", pole[i, j]);
                }
                Console.WriteLine();
            }
        }



    }
}

Problém je tady:

if (i > j)
                    {
                        pole[i, j] = i * 2;
                    }

Děkuji

Editováno 25.11.2016 20:01
 
Odpovědět 25.11.2016 20:00
Avatar
Jakub Klindera:25.11.2016 20:03

Je tam problém s přílohou, tak posílám odkazy:

Takhle to má vypadat
Takhle to vypadá

 
Nahoru Odpovědět 25.11.2016 20:03
Avatar
HONZ4
Člen
Avatar
HONZ4:25.11.2016 21:03

pokud na to nutně chceš jít matematicky:

private static void naplnPole(int[,] pole)
        {
            for (int i = 0; i < pole.GetLength(0); i++)
            {
                for (int j = 0; j < pole.GetLength(1); j++)
                {
                    if (i == j)pole[i, j] = 1;
                    else
                    {
                        if (i < j) pole[i, j] = j + 1 - i;
                        else pole[i, j] = i * (i -1) + 2 +  j*2;
                    }
                }
            }
        }

nejsem moc na matematiku takže takto složitě :(

 
Nahoru Odpovědět 25.11.2016 21:03
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Jakub Klindera
Lukáš Křehula:25.11.2016 21:16

Jedno řešení, které mě napadlo je s pomocnou proměnnou n

private static void naplnPole(int[,] pole)
        {
            int n = 1;
            for (int i = 0; i < pole.GetLength(0); i++)
            {
                for (int j = 0; j < pole.GetLength(1); j++)
                {


                    if (i == j)
                    {
                        pole[i, j] = 1;
                    }
                    else
                    {
                        pole[i, j] = 0;

                    }

                    if (i < j)
                    {
                        pole[i, j] = j + 1 - i;
                    }
                    if (i > j)
                    {
                        pole[i, j] = n * 2;
                        n++;
                    }
                }
            }
        }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 25.11.2016 21:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukáš Křehula
HONZ4:25.11.2016 21:36

když "bez matematiky" tak:

int n = 0;
            for (int i = 0; i < pole.GetLength(0); i++)
            {
                for (int j = 0; j < pole.GetLength(1); j++)
                {
                    if (i == j)pole[i, j] = 1;
                    else
                    {
                        if (i < j) pole[i, j] = j + 1 - i;
                        else pole[i, j] = n += 2;
                    }
                }
            }

přijde mi zbytečné to přičítat po jedné a pak násobit dvěma, když to můžu přičítat rovnou po dvou.

 
Nahoru Odpovědět 25.11.2016 21:36
Avatar
Odpovídá na Lukáš Křehula
Jakub Klindera:25.11.2016 21:56

Děkuji mnohokrát, tvé řešení se mi přijde nejlepší.

Děkuji vám oběma.

 
Nahoru Odpovědět 25.11.2016 21:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.