Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
MadaraCZech
Tvůrce
Avatar
MadaraCZech:26.10.2014 23:36

Ahoj,

je čas půlnoci a to znamená, že do kódu začnu psát neskutečný blbosti, které nedávají smysl. Dnes konkrétně tohle :

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();
            }
            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++;
               }

            Console.WriteLine(arabske);
            Console.ReadKey();

        }

    }
}

Může mi prosím někdo říct, co je špatně ?
Díky.

 
Odpovědět
26.10.2014 23:36
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:27.10.2014 0:00

Těžko říct, co je na něčem špatně, když nevíš co má být výsledek :)

Editováno 27.10.2014 0:00
 
Nahoru Odpovědět
27.10.2014 0:00
Avatar
Odpovídá na MadaraCZech
Michal Štěpánek:27.10.2014 5:32

Jen tak zběžně:

  1. Nejdřív má uživatel zadat, kolik má číslo písmen, pak má zadat teprve to číslo a pak kontroluješ výskyt písmen v tom čísle. Už tento postup si myslím, že je špatně, protože jak může uživatel zadat počet písmen, když ještě nezadal číslo, resp. proč má počet písmen uživatel vůbec zadávat? Já myslel, že to má program vyplivnout.
  2. Kontroluješ výskyt písmen "V" a "I", ale římské číslice se skládají taky z "C", "D", "M", "L" a "X".
  3. Řekl bych, že program vyzve k zadání čísla několikrát po sobě, aniž by vůbec něco počítal, protože máš cyklus ukončený po zadání čísla
Editováno 27.10.2014 5:35
Nahoru Odpovědět
27.10.2014 5:32
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na MadaraCZech
Michal Štěpánek:27.10.2014 5:37

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í...

Nahoru Odpovědět
27.10.2014 5:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
vodslon
Člen
Avatar
Odpovídá na MadaraCZech
vodslon:27.10.2014 8:27

Ahoj, a co ten program má vlastně dělat? Měl by přenášet číslem zapsanej arabsky na římsky?

 
Nahoru Odpovědět
27.10.2014 8:27
Avatar
Michal Žůrek - misaz:27.10.2014 9:25

Ano, Madara řeší aktuálního Machra a zamotal se v tom. :D

 
Nahoru Odpovědět
27.10.2014 9:25
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na vodslon
MadaraCZech:27.10.2014 16:37

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.

 
Nahoru Odpovědět
27.10.2014 16:37
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
MadaraCZech:27.10.2014 16:38

Tak to se připrav na to, jak bude vypadat finální verze.

 
Nahoru Odpovědět
27.10.2014 16:38
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
MadaraCZech:27.10.2014 16:39

2.) Ještě to není hotové, mám na to pět dní..

 
Nahoru Odpovědět
27.10.2014 16:39
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:27.10.2014 23:21
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 :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
27.10.2014 23:21
Avatar
MadaraCZech
Tvůrce
Avatar
MadaraCZech:27.10.2014 23:43

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";
Editováno 27.10.2014 23:44
 
Nahoru Odpovědět
27.10.2014 23:43
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:28.10.2014 1:13

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.

 
Nahoru Odpovědět
28.10.2014 1:13
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:28.10.2014 1:22

Ještě malý hint:

string s = "IVI";
if (s.IndexOf("IV", 0) != -1)
   ...

Ale i tak tam je dost chyb, takže gl :)

 
Nahoru Odpovědět
28.10.2014 1:22
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Jan Vargovský
MadaraCZech:28.10.2014 11:25

Rozhodl jsem se, že to udělám v PHP. :D :D

 
Nahoru Odpovědět
28.10.2014 11:25
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na MadaraCZech
MadaraCZech:28.10.2014 12:13

Tak už zase ne :D Přišel jsem na to, jak to udělat jinou cestou.

 
Nahoru Odpovědět
28.10.2014 12:13
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na MadaraCZech
Petr Nymsa:28.10.2014 12:17

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 :)

Nahoru Odpovědět
28.10.2014 12:17
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Jan Vargovský
Lukáš Křehula:28.10.2014 13:08

Pokud bude chtít kontrolovat syntaxi zadaného příkladu tak mu to moc nepomůže.

 
Nahoru Odpovědět
28.10.2014 13:08
Avatar
MadaraCZech
Tvůrce
Avatar
Odpovídá na Lukáš Křehula
MadaraCZech:28.10.2014 13:10

Já už to stejně dělám jinak.

 
Nahoru Odpovědět
28.10.2014 13:10
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 18 zpráv z 18.