Avatar
Jakub Klindera:

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. listopadu 20:01
 
Odpovědět 25. listopadu 20:00
Avatar
Jakub Klindera:

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

Takhle to má vypadat
Takhle to vypadá

 
Nahoru Odpovědět 25. listopadu 20:03
Avatar
HONZ4
Člen
Avatar
HONZ4:

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. listopadu 21:03
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Jakub Klindera
Lukáš Křehula:

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. listopadu 21:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na Lukáš Křehula
HONZ4:

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. listopadu 21:36
Avatar
Odpovídá na Lukáš Křehula
Jakub Klindera:

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

Děkuji vám oběma.

 
Nahoru Odpovědět 25. listopadu 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.