NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
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
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í
+2,50 Kč
Ř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.