Diskuze: Nesmysl v kódu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Těžko říct, co je na něčem špatně, když nevíš co má být
výsledek
Jen tak zběžně:
Teď mi došlo, že to první číslo, které má uživatel zadat, nebude počet písmen, ale počet cyklů. Program se však uživatele ptá, "Kolik má číslo písmen?" a pak má napsat číslo, to je matoucí...
Ahoj, a co ten program má vlastně dělat? Měl by přenášet číslem zapsanej arabsky na římsky?
Ano, Madara řeší aktuálního Machra a zamotal se v tom.
Jo, přesně tak.
Konkrétně nefunguje tohle :
foreach (string a in rimske)
{
if ((a == "V") && (rimske[rimske.Length - 1] != "I"))
arabske = arabske + 5;
else
{
rimske[rimske.Length - 1] = "false";
arabske = arabske + 4;
}
if (a == "I")
arabske++;
}
Myslel jsem to takhle :
Když se najde v tom poli V, tak se ověří, jestli před V v poli není ještě I. Pokud ano, tak to tedy bude 4. Jenže to by se k tomu ještě pak přičetla I, takže tu změním na "false", nebude tedy započítána. Když ale před tím V nebude I, tak to bude 5. Jenže po zadání IV do programu mi vypadlo 42, což je blbost.
Tak to se připrav na to, jak bude vypadat finální verze.
2.) Ještě to není hotové, mám na to pět dní..
if ((a == "V") && (rimske[rimske.Length - 1] != "I"))
Zřejmě nedělá to, co si ty myslíš. rimske.Length ti vrátí v tomto případě vždycky 9, takže se nedíváš, jestli náhodou před tím "V" není "I", ale díváš se vždycky na to, jestli je na konci "I". Abys zkontroloval znak před "V", tak bys musel v tomto případě získat... Nechce se mi to ani psát, přepiš si to na for cyklus (nebo jakýkoli jiný, kromě foreache, u kterého se index těžko získává).
Jestli teda dobře chápu, co ti na tom blbne
Takže nějak takhle ?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace prevodnik_madara
{
class Program
{
static void Main(string[] args)
{
string[] rimske = new string[10];
int arabske = 0;
Console.WriteLine("Kolik ma cislo pismen ? : ");
int pocet = int.Parse(Console.ReadLine());
for (int i = 0; i < pocet; i++)
{
Console.Write("Zadejte {0}. číslo: ", i + 1);
rimske[i] = Console.ReadLine();
}
for (int i = 0; i < 10; i++)
{
if ((rimske[i] == "V") && (rimske[i-1] != "I"))
arabske = arabske + 5;
else
{
rimske[i-1] = "false";
arabske = arabske + 4;
}
if (rimske[i] == "I")
arabske++;
}
Console.WriteLine(arabske);
Console.ReadKey();
}
}
}
Píše mi to totiž error.
Konkrétně zde :
rimske[i-1] = "false";
To je jásné, protože rimske na indexu -1 je mimo hranici. Takže bys měl asi začít indexovat od 1 nebo tam dát ještě podmínku.
Ještě malý hint:
string s = "IVI";
if (s.IndexOf("IV", 0) != -1)
...
Ale i tak tam je dost chyb, takže gl
Tak už zase ne Přišel
jsem na to, jak to udělat jinou cestou.
Místo spamování, se nad tím zkus doopravdy zamyslet. Změna jazyka by ti
stejně nepomohla I tak by jsi
musel vymyslet postup a myslím že v PHP by se ti to možná dělalo
obtížněji
Pokud bude chtít kontrolovat syntaxi zadaného příkladu tak mu to moc nepomůže.
Zobrazeno 18 zpráv z 18.