Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

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ý
Redaktor
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:

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:

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:

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:

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

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

Nahoru Odpovědět 27.10.2014 9:25
Nesnáším {}, proto se jim vyhýbám.
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na vodslon
MadaraCZech:

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
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
MadaraCZech:

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

 
Nahoru Odpovědět 27.10.2014 16:38
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Michal Štěpánek
MadaraCZech:

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ý
Redaktor
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:
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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 27.10.2014 23:21
Avatar
MadaraCZech
Redaktor
Avatar
MadaraCZech:

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ý
Redaktor
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:

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ý
Redaktor
Avatar
Odpovídá na MadaraCZech
Jan Vargovský:

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
Redaktor
Avatar
Odpovídá na Jan Vargovský
MadaraCZech:

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

 
Nahoru Odpovědět 28.10.2014 11:25
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na MadaraCZech
MadaraCZech:

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
Redaktor
Avatar
Odpovídá na MadaraCZech
Petr Nymsa:

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
Lukáš Křehula
Redaktor
Avatar
Odpovídá na Jan Vargovský
Lukáš Křehula:

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
Redaktor
Avatar
Odpovídá na Lukáš Křehula
MadaraCZech:

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.