[C#] wieża Hanoi

Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] wieża Hanoi

Post autor: Hania_87 »

Mam problemy z napisaniem w języku C# następującego programu z wykorzystaniem rekurencji:

Mamy trzy pręty i n krążków o różnych średnicach, które są nanizane są na pierwszy pręt w porządku malejących średnic tworząc wieżę. Chcemy przenieść krążki z pierwszego pręta na drugi, przy pomocy pręta trzeciego stosując następujące zasady:
- w każdym kroku można przenieść dokładnie jeden krążek
- krążek nie może być nigdy nałożony na krążek o mniejszej średnicy
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6908
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

[C#] wieża Hanoi

Post autor: Mariusz M »

Sama funkcja w języku C wygląda następująco

Kod: Zaznacz cały

       void hanoi(int n, int start, int finish, int extra)

		 {

			 if (n > 0) {

             hanoi(n-1, start, extra, finish);

				 printf("Move disc %d from %c to %c.
", n, 64+start, 64+finish);

             hanoi(n-1, extra, finish, start);

          }

       }

Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] wieża Hanoi

Post autor: Hania_87 »

nie znam języka C
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

[C#] wieża Hanoi

Post autor: Szemek »

Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] wieża Hanoi

Post autor: Hania_87 »

nie wychodzi mi ten program, zrobiłam, tak, ze ostatni pręt jest pomocniczy, a na drugi pręt mam przełożyć

Kod: Zaznacz cały

using System;
using System.Collections.Generic;
using System.Text;

namespace WizeHanoi
{
    class Program
    {
        static void Main(char[] args)
        {
            uint n;
            Console.Write("Podaj liczbe krazkow: ");
            n = Convert.ToUInt16(Console.ReadLine());
            Hanoi(n, "X", "Y", "Z");
            Console.ReadKey();
        }
        static void Hanoi(uint n, char x, char y, char z)
        {
            if (n == 0)
                throw new ArgumentException("Liczba krazków musi byc wieksza nie zero");
            if (n == 1)
            {
                Console.WriteLine("Przenis z pretu {0} na pręt {1}.", x, y);
            }
            else
            {
                Hanoi(n - 1, x, z, y);
                Console.WriteLine("Przenis z pretu {0} na pręt {1}.", x,y);
                Hanoi(n - 1, z, y, x);
            }
        }
    }
}
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

[C#] wieża Hanoi

Post autor: Szemek »

poprawiłem błąd przy wywołaniu funkcji Hanoi, tzn. kolejność i typy argumentów

Kod: Zaznacz cały

using System;
using System.Collections.Generic;
using System.Text;

namespace WizeHanoi
{
    class Program
    {
        static void Main(string[] args)
        {
            uint n;
            Console.Write("Podaj liczbę krążków: ");
            n = Convert.ToUInt16(Console.ReadLine());
            Hanoi(n, 'X', 'Z', 'Y');
            Console.ReadKey();
        }
        static void Hanoi(uint n, char x, char y, char z)
        {
            if (n == 0)
                throw new ArgumentException("Liczba krażków musi być większa niż zero");
            if (n == 1)
            {
                Console.WriteLine("Przenieś z prętu {0} na pręt {1}.", x, y);
            }
            else
            {
                Hanoi(n - 1, x, z, y);
                Console.WriteLine("Przenieś z prętu {0} na pręt {1}.", x, y);
                Hanoi(n - 1, z, y, x);
            }
        }
    }
}
Hania_87
Użytkownik
Użytkownik
Posty: 860
Rejestracja: 18 cze 2007, o 20:57
Płeć: Kobieta
Lokalizacja: Rybnik
Podziękował: 86 razy
Pomógł: 57 razy

[C#] wieża Hanoi

Post autor: Hania_87 »

program sie sypie w sumie tylko dla wyjątków (0 i ujemnych)-- 8 czerwca 2009, 09:52 --nie umię sobie poradzić z wyjatkami, wiem że powyższy program ich nie zwraca i te dwie linie są bezsensu
ODPOWIEDZ