Metody - błąd w kodzie

0

Cześć, możecie mi powiedzieć dlaczego ten kod nie działa? Ja nie widzę.

namespace cw5zad2
{
	class MainClass
	{
		static bool czyRosnąco(int [] tablica)
		{
			bool r = true;
			for (int i=0; i< tablica.Length; i++)
			{
				if (!(tablica[i+1] > tablica[i]) )
				{
					r = false;
					break;
				}
			}
			return r;
		}

		public static void Main (string[] args)
		{
			Console.WriteLine ("Podaj ilość elementów twojej tablicy");
			int n = Convert.ToInt32 (Console.ReadLine ());
			int[] tab = new int [n];
			for (int i = 0; i < tab.Length; i++) 
				{
				Console.WriteLine ("Podaj element nr. {0} w twojej tablicy: ", i+1);
					int a = Convert.ToInt32 (Console.ReadLine ());
					a = tab [i];
				}

			if (czyRosnąco(tab) == true) Console.WriteLine ("Twoja tablica jest uporządkowana rosnąco");
		}
	}
}


0

Co to znaczy nie działa?

0

if (!(tablica[i+1] > tablica[i]) ) jest poza zakresem, nie rozumiem dlaczego

0

Lecisz pętlą:

for (int i=0; i< tablica.Length; i++)

Więc przy ostatniej iteracji wyjdzie poza zakres, jeśli użyjesz:
tablica[i+1]

Np załóżmy, że tablica ma rozmiar równy 10 więc ma indeksy 0,1,2,3,4,5,6,7,8,9

Lecąc tą pętlą będziesz miał indeksy 1,2,3,4,5,6,7,8,9,10 (bach, poza zakresem)

0

Ok, wielkie dzięki, teraz rozumiem. :)

Czy w takim razie jeśli pętla powinna wyglądać tak :

 for (int i=0; i< tablica.Length + 1; i++)

?

I w jaki sposób odwołać się do tej metody, bo też mi tu coś nie działa jak poprawiłem pętlę, kompilator podkreśla odwołanie do metody ???

0

Proszę, z wytłumaczeniem:

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static bool czyRosnąco(int[] tablica)
        {
            int aktualnaWartosc = tablica[0]; //bierzemy pierwszy element tablicy
            for (int i = 1; i < tablica.Length; i++) //zaczynamy od drugiego elementu
            {
                if (aktualnaWartosc < tablica[i]) //jesli nastepny element tablicy jest wiekszy od aktualnego
                {
                    aktualnaWartosc = tablica[i]; //to do aktulanego elementu wpisz ten większy
                    //załozmy ze mamy tablice 1 4 5 6 2
                    //najpierw w aktulanejWartosci jest 1 i porownujemy z indeksem [1] czyli wartoscia 4
                    //warunek jest spelniony i do aktualnaWartosc wpisujemy 4 i leci znow petla
                    //teraz sprawdzamy czy 5 jest wieksza od aktulanejWartosci  czyli 4 i znow pomieniamy
                    //doszlismy do momentu gdy w aktualnaWartosc mamy 6 a ostatnim elementem jest 2
                    //teraz warunek nie bedzie speliony i wyladujemy w else i zwrocimy false
                }
                else
                    return false;
            }
            return true; //tutaj trafimy tylko jesli kazda obrót pętli przeszedł czyli każda następna liczba jest wieksza lub równa
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Podaj ilość elementów twojej tablicy");
            int n = Convert.ToInt32(Console.ReadLine());
            int[] tab = new int[n];
            for (int i = 0; i < tab.Length; i++)
            {
                Console.WriteLine("Podaj element nr. {0} w twojej tablicy: ", i + 1);
                int a = Convert.ToInt32(Console.ReadLine());
                tab[i] = a; //tu tez miales blad
                //raczej do tablicy checsz wpisać to co podałeś, a nie tak jak wczesnie było
                //a = tab [i]; <-- to powoduje ze do zmiennej a przypisujesz wartosci tablicy spod indexu i
            }

            if (czyRosnąco(tab) == true) Console.WriteLine("Twoja tablica jest uporządkowana rosnąco");
            else Console.WriteLine("Twoja tablica nie jest uporzadkowa rosnaca.");
            Console.ReadLine();
        }
    }
}
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1