Wątek przeniesiony 2017-01-03 17:10 z C# i .NET przez somekind.

Tablice, pętle - pytania

0

Siemka,
Dopiero uczę się programować w języku C# i mam problem z naprawdę prostymi rzeczami. Rozumiem instrukcje warunkowe i pętle, ale nie wiem jak np pokazać liczbę najmniejszą i największą wśród liczb losowanych (randoma umiem) bądź nie; np pokazać liczby co trzecie wśród losowanych bądź nie; wyznaczyć ile elementów jest większych lub mniejszych od średniej(średnią umiem); wypisać na ekranie jakieś liczby w odwrotnej kolejności i znajdą się jeszcze inne problemy tego typu. Nie wiem czy mam się ich nauczyć na pamięć, czy jest jakiś sposób aby to zrozumieć i wiedzieć jak takie zadanka robić? I mam taki sam problem przy zadaniach z tablicami. Bardzo Was proszę o pomoc :D

0

Popatrz sobie na przykłady w internecie, przeanalizuj i napisz takie coś samemu.
Najmniejsza i największa: trzymasz dwie takie zmienne, lecisz pętlą po tablicy i dla każdej liczby sprawdzasz czy jest mniejsza od najmniejszej (jeśli tak to ona staje się najmniejszą), podobnie dla największej.
Co trzecia - sprawdzasz czy index podzielny przez 3 (indexy w tablicy zaczynamy od 0, więc ma Ci wypisać tab[0], tab[3]. tab[6] itd.)
Odwrotna kolejność - iterujesz po tablicy od końca, czyli od indexu równego (tab.size - 1)

1

Trzeba dużo praktykować. Potem utrzymując odpowiednią kondycję programistyczną takie problemy będziesz rozwiązywał z marszu.

liczba najmniejsza

  1. przed losowaniem liczb inicjujesz zmienną min, powinna mieć wartość int.MaxValue.
  2. każdą losowaną liczbę porównujesz do zmiennej min, jeśli dana liczba jest od niej mniejsza, to zamieniasz nią wartość zmiennej min.
  3. po wszystkim wypisujesz wartość zmiennej min.

wyznaczyć ile elementów jest większych lub mniejszych od średniej(średnią umiem)

  1. najpierw liczysz średnią i zapisujesz do zmiennej avg.
  2. deklarujesz zmienne lowerCount, higherCount i inicjujesz je zerem.
  3. iterując po elementach zwiększasz zmienne lowerCount/higherCount w zależności od tego czy element jest mniejszy lub większy od avg.
  4. potem wyspisujesz wartości zmiennych lowerCount i higherCount

itd.

Obejrzyj sobie filmik: http://www.cda.pl/video/114042037

0

A co do sumy trzecich liczb to o to chodzi?

for (int i = 1; i <= 10; i++)
            {
                int b = rnd.Next(-10, 11);
                Console.WriteLine(b);
                if (b% 3 == 0)
                {
                    
                    suma1 = suma1 + b;

                }
            }
0

Powinno być

 if (i% 3 == 0)

b jest losowe i nie można od niego uzależniać tego algorytmu :)

0

Oki :)

A co do wyznaczenia ile elementów jest mniejszych, ile większych od średniej to dotyczy zadania z tablic, gdzie muszę zrobić 10 elementową tablicę i wypełnić ją losowymi liczbami z przedziału (-10,10) i jak to wtedy zrobić? :D

0

Tak jak Ci napisałem. Liczysz średnią. Porównujesz z nią każdy element tablicy wypełnionej liczbami losowymi i zwiększasz odpowiednie liczniki.

0

A jak ma wyglądać to porównanie z każdym elementem?

0
for (int i = 0; i < tablica.Length; i++) {
    if (tablica[i] > avg) {
        higherCount ++;
    } else if (tablica[i] < avg) {
        lowerCount ++;
    }
}

Zgodne z treścią zadania, którą podałeś. Liczby równe średniej nie będą naliczane do żadnego licznika.

0

A dlaczego przy lowercount i highercount jest inkrementacja?

0

Sprawdziłbyś kod:

Random rnd = new Random();
            int[] tablica;
            tablica = new int[10];
            int max = tablica[0];
            int min = tablica[0];
            double suma = 0;

            int lowerCount = 0;
            int higherCount = 0;
            double avg = suma / 10;

            for (int i = 0; i < tablica.Length; i++)
            {
                tablica[i] = rnd.Next(-10, 11);
                Console.WriteLine(tablica[i]);

                if (tablica[i] > max)
                {
                    max = tablica[i];
                }
                else if (tablica[i] < min)
                {
                    min = tablica[i];
                }


                else if (tablica[i] > avg)
                {
                    higherCount++;
                }
                else if (tablica[i] < avg)
                {
                    lowerCount++;
                }

                suma = suma + tablica[i];

            }


        

            Console.WriteLine("Nawiększy element to: " + max + " i " + "Najmniejszy element wynosi: " + min);

            Console.WriteLine("Średnia arytmetyczna to: " + suma / 10);
            Console.WriteLine("ilość liczb większej od średniej: " + higherCount + " i " + "ilość liczb mniejszej od średniej: " + lowerCount);
            Console.ReadKey();
0

Twoj kod jest zly, bo masz za duzo else if. Wprowadz sobie dane i zobacz czy bedziesz miec dobry output (teraz Ci nie bedzie zliczal wystapien)

Korzystaj z jezyka, nie wynajduj kola na nowo

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

public class Test
{
	public static void Main()
	{
		Random rand = new Random();
		var listOfNumbers = Enumerable.Range(1, 10).Select(x => rand.Next(1, 7)).ToList();
		var average = listOfNumbers.Sum() / listOfNumbers.Count; // tutaj jest blad bo policzy to jako int a nie jako float. To jest zadanie dla Ciebie
		var numbersBelowAverage = listOfNumbers.Where(x => x < average).ToList().Count;
		var numbersAboveAverage = listOfNumbers.Where(x => x > average).ToList().Count;
		Console.WriteLine($"liczba elementow {listOfNumbers.Count} srednia {average} pozniej sredniej {numbersBelowAverage} powyzej {numbersAboveAverage}");
	}
}
0

Skomplikowane bardzo xd

0

Kod jest błędny, jeśli chcesz w jednej pętli losować i szukać liczby największej (najmniejszej), to nie możesz tak inicjować zmiennych:

            int max = tablica[0];
            int min = tablica[0]; 
0

Dyskusje prowadź w postach, a nie w komentarzach.
@Spine w swoim pierwszym poście napisał jak masz inicjować. Twój kod z inicjalizacją

            int max = tablica[0];
            int min = tablica[0];

daje błędne wyniki gdy wszystkie wylosowane liczby są dodatnie (>0) albo wszystkie są ujemne (<0).

0

a liczba największa to jak, bo on napisał tylko najmniejszą? :)

0

takie coś?

Random rnd = new Random();
            int[] tablica;
            tablica = new int[10];

            int max = -10;
            int min = 10;
            double suma = 0;

            int lowerCount = 0;
            int higherCount = 0;
            double avg = suma / 10;

            for (int i = 0; i < tablica.Length; i++)
            {
                tablica[i] = rnd.Next(-10, 11);
                Console.WriteLine(tablica[i]);

                if (tablica[i] < min)
                {
                    min = tablica[i];
                }
                if (tablica[i] > max)
                {
                    max = tablica[i];
                }


                if (tablica[i] > avg)
                {
                    higherCount++;
                }
                if (tablica[i] < avg)
                {
                    lowerCount++;
                }
                
                
                
                suma = suma + tablica[i];

            }




            Console.WriteLine("Największy element to: " + max + " i " + "Najmniejszy element wynosi: " + min);

            Console.WriteLine("Średnia arytmetyczna to: " + suma / 10);
            Console.WriteLine("ilość liczb większej od średniej: " + higherCount + " i " + "ilość liczb mniejszej od średniej: " + lowerCount);
            Console.ReadKey();
0

Wstawiaj kod w znaczniki kolorujące kod.
Teraz jest lepiej, tzn. kod poprawnie znajduje wartość największą i najmniejszą. Dwie rzeczy bym poprawił:

  • ostatni wyświetlany komunikat "ilość liczb większej .." spróbuj sformułować po polsku,
  • bardzo łatwo o błędne działanie kodu gdy wpadniesz na pomysł by zmienić zakres losowanych liczb, zmiany musisz wtedy zrobić w dwóch miejscach kodu
int lowerBound = -10;
int upperBound = 10;
...
int max = lowerBound;
int min = upperBound;
...
tablica[i] = rnd.Next(lowerBound, upperBound + 1);
0

A jak zrobię tak jak napisałeś to tylko w jednym miejscu zmienie zakres tak?

0

Tak.
Post usunąłem bo znów nie "pokolorowałeś", ale zdążyłem zauważyć, że niczego z moich wskazówek nie zrozumiałeś.

0

A gdzie mam błąd?

0

A jak mam go pokolorowac?

0

Usunąłeś zmienne max oraz min, one miały zostać.

            int lowerBound = -10; //dopisz.
            int upperBound = 10; //dopisz
            Random rnd = new Random();
            int[] tablica;
            tablica = new int[10];
       
            int max = lowerBound; //zmień
            int min = upperBound; //zmień
            double suma = 0;
 
            int lowerCount = 0;
            int higherCount = 0;
            double avg = suma / 10;
 
            for (int i = 0; i < tablica.Length; i++)
            {
                tablica[i] = rnd.Next(lowerBound, upperBound + 1); //zmień

Reszty kodu **nie zmieniaj **

Skorzystaj z ostatniego przycisku po prawej na pasku narzędzi.

0

Znowu źle mi pokazuje :C

 Random rnd = new Random();
            int[] tablica;
            tablica = new int[10];

            int lowerbound = -10;
            int upperbound = 10;
            double suma = 0;
            int max = lowerbound;
            int min = upperbound;
            int lowerCount = 0;
            int higherCount = 0;
            double avg = suma / 10;

            for (int i = 0; i < tablica.Length; i++)
            {
                tablica[i] = rnd.Next(lowerbound, upperbound);
                Console.WriteLine(tablica[i]);

                if (tablica[i] < max)
                {
                    max = tablica[i];
                }
                if (tablica[i] > min)
                {
                    min = tablica[i];
                }


0

Debugger mi źle pokazuje, naprawdę :o pokauzje mi np -10 jak takiej wartosci w ogóle nie wylosowało

0

To pisz do twórców debuggera, że go spieprzyli.

0

Co ja mam Ci odpisać, jak mówię co widzę.
Dowód (skopiowane z debuggera):
-9
3
-10
1
-8
6
7
-2
4
-7
Nawiększy element to: 10 i Najmniejszy element wynosi: -10
Średnia arytmetyczna to: -1,5
ilość liczb większej od średniej: 5 i ilość liczb mniejszej od średniej: 5

0

W moim linku widać jednocześnie kod i wypisane prze ten kod wartości, wyniki są poprawne. U Ciebie widać tylko wartości, nie wiadomo jaki kod jest wykonywany.

0

Mój błąd, sorrka za kłopot

A wiesz może jak napisac kod,który odwróci kolejność elementów w tablicy?

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