Stránka 1 z 1
C# - Posloupnost
Napsal: 29 kvě 2014 18:44
od Irena
Dobrý den,
Potřebuji vypsat dva řádky posloupností, z nichž druhá má opačné pořadí členů. Konec programu nemám dobře. Jak má být správně?
Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication26
{
class Program
{
static Random random = new Random();
static void Main(string[] args)
{
Console.Write("Náhodná čísla jsou ");
int n = 20;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = random.Next(9);
for (int i = 0; i < n; i++)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
for (int i = n; i > 0 ; i--)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
{
}
}
}
}
Děkuji za všechny odpovědi
Re: C# - Posloupnost
Napsal: 29 kvě 2014 19:20
od faraon
Máš pole
a[20], což znamená že obsahuje buňky
[0] až
[19]. Sleduj co provádí ten počet prvků
n=20:
V prvním cyklu správně indexuješ od
i=0 do
i<n, tedy od
0 do
19.
Ve druhém cyklu začínáš indexovat od
i=n, a končíš při
i>0, takže se pokoušíš od indexy
20 až
1! Co s tím provedeš?
Jinak to naplnění pole by šlo s prvním výpisem sloučit do jednoho cyklu, program by se tím urychlil

Re: C# - Posloupnost
Napsal: 29 kvě 2014 19:33
od Irena
řekla bych, že toto
Console.Write("Náhodná čísla jsou ");
int n = 20;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = random.Next(9);
for (int i = 0; i < n; i++)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
Console.Write("Pozpátku ");
for (int i = n-1; i <= 0; i--)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
Console.ReadLine();
ale ani to není dobře, asi mi něco uniká
Re: C# - Posloupnost
Napsal: 29 kvě 2014 19:40
od faraon
No, byl to krok správným směrem, ale tu podmínku jsi otáčet neměla:
for (int i = n-1; i >= 0 ; i--)
Slovně by se dalo říct "opakuj dokud je i větší nebo rovno nule".
Re: C# - Posloupnost
Napsal: 29 kvě 2014 19:47
od Irena
Děkuji, teď to mám takto:
Console.Write("Náhodná čísla jsou ");
int n = 20;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = random.Next(9);
for (int i = 0; i < n; i++)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
Console.Write("Pozpátku ");
for (int i = n-1; i >= 0; i--)
Console.Write(a[i] + (i > 0 ? ", " : ""));
Console.WriteLine();
Console.ReadLine();
ještě jsem změnila drobnost v 3.řádku od spodu
Můžu se zeptat ještě na jiný příklad?
Tohle nevím z které strany pojmout: . Sestavte program, který provede cyklický posun členů posloupnosti o k míst doleva a takto upravenou posloupnost vypíše.
Jako výchozí vstupní hodnoty posloupnosti použijte indexy těchto členů zvýšené o +1, n = 20.
Re: C# - Posloupnost
Napsal: 29 kvě 2014 20:03
od faraon
To odřádkování by se dalo udělat i jinak, když už používáš ternární výraz. Místo
Kód: Vybrat vše
Console.Write(a[i] + (i > 0 ? ", " : ""));
Console.WriteLine();
by mohlo stačit
Kód: Vybrat vše
Console.Write(a[i] + (i > 0 ? ", " : "\n"));
Zkus jestli to v C# funguje, v C a C++ to jde.
Ten posun posloupnosti by mělo být něco takového:
1,2,3,4,5posun=1
2,3,4,5,1Takže by stačilo první buňku odložit do nějaké dočasné proměnné, celé pole cyklem posunout (bacha na poslední buňku, do té už se nic neposouvá!), a pak do poslední buňky vložit obsah té dočasné proměnné.
Re: C# - Posloupnost
Napsal: 29 kvě 2014 20:10
od Irena
To by posunulo o jeden, ale já se musím nejdřív zeptat jaké je k, které je vždy jiné. Něco podobného už jsem měla v tomto příkladu:
Sestavte program, který do posloupnosti přidá na prvních k pozic, čísla od k-1 do 0 (tj. sestupně) a ostatní členy posune dozadu. Hodnotu k zadá uživatel, před jejím požitím ověřte že 1 <= k <= n, jinak nechť je vypsána chyba. Nově vzniklou posloupnost ať program vypíše.
Jako výchozí vstupní hodnoty posloupnosti použijte náhodná čísla od 0 do 9, n = 10.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication24
{
class Program
{
static Random random = new Random();
static void Main(string[] args)
{
Console.Write("Náhodná čísla jsou ");
int n = 10;
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = random.Next(9);
for (int i = 0; i < n; i++)
Console.Write(a[i] + (i < n - 1 ? ", " : ""));
Console.WriteLine();
Console.WriteLine("Zadej číslo: ");
int k = Convert.ToInt32(Console.ReadLine());
Array.Resize(ref a, a.Length + k);
for (int i = a.Length - 1; i >= k;i-- )
{
a[i] = a[i - k];
}
for (int i = 0; i < k;i++ )
{
a[i] = k - i - 1;
}
Console.WriteLine();
for (int i = 0; i < n; i++)
{
Console.Write((i) + " " + a[i]);
Console.WriteLine();
}
Console.ReadLine();
}
}
}
Ale i tady to asi nemám dobře.
Re: C# - Posloupnost
Napsal: 29 kvě 2014 20:22
od faraon
No a když k=5, je problém to pole posunout pětkrát o 1?

Jo, je to prasárna, a určitě to není nejrychlejší. Takže místo dočasné proměnné bych použil dočasné pole, tak velké o kolik má být posun, do něj zkopíroval začátek té posloupnosti, potom jí posunul a dočasné pole zkopíroval zase na konec.
Ten kód dávej do tagu Code tak jako v prvním příspěvku, zachová se ti odsazování a mnohem lépe se to čte.
Re: C# - Posloupnost
Napsal: 29 kvě 2014 20:33
od Irena
první příspěvek vložil syn, zeptám se jak to dělal :)