Dane pacjentów w kolejności odwrotnej, najstarszy/najmłodszy wiek, średnia wieku.

0

Napisz program, który wykorzystuje zmienną tablicową przechowując dane 10 pacjentów: imiona, nazwiska i wiek.
Wczytaj w pętli for dane pacjentów i wyświetl w kolejnoci odwrotnej w pętli foreach dane pacjentów, a następnie wiek najstarszego z nich, najmłodszego oraz średni wiek (precyzyjnie, bez odrzucenia części ułamkowej)
Chciałam się upewnić czy dobrze wykonałam to zadanie:

int suma = 0;
           
            String[] tab1 =new String[11];
            String[] tab2 = new String[11];
            int[] tab3 = new int[11];
            for (int i=1; i<=10; i++)
            {
                Console.WriteLine("Podaj imie {0}",i);
                tab1[i] = Convert.ToString(Console.ReadLine());
                Console.WriteLine("Podaj nazwisko {0}",i);
                tab2[i] = Convert.ToString(Console.ReadLine());
                Console.WriteLine("Podaj wiek {0}",i);
                tab3[i] = Convert.ToInt32(Console.ReadLine());
                Array.Sort(tab1);
                Array.Sort(tab2);
                Array.Sort(tab3);
                Array.Reverse(tab1);
                Array.Reverse(tab2);
                Array.Reverse(tab3);
            }
            foreach (var x in tab1)
            {
                Console.WriteLine("Imie: {0},", x);
            }
            foreach (var x in tab2)
            {
                Console.WriteLine("Nazwisko :{0},", x);
            }
            foreach (int x in tab3)
            {
                Console.WriteLine("Wiek; {0},", x);
            }

            int max = tab3[0];    
            for (int i = 1; i < tab3.Length; i++)
            {
                if (tab3[i] > max)
                {
                    max = tab3[i];
                }
            }
            Console.WriteLine("Najstarszy pacjent ma {0} lat(a)", max);

            int min = tab3[0];    
            for (int i = 1; i < tab3.Length; i++)
            {
                if (tab3[i] < max)
                {
                    min = tab3[i];
                }
            }
            Console.WriteLine("Najmłodszy pacjent ma {0} lat(a)", min);

            for (int i = 0; i < tab3.Length; i++)
            {
                Console.Write("{0}, ", tab3[i]);
                suma += tab3[i];
            }
            double srednia = (double)suma / tab3.Length;

            Console.WriteLine("Średni wiek: {0}", srednia);
            Console.ReadKey();
1
  1. Masz użyć jednej zmiennej tablicowej a użyłeś trzech. Stwórz klase pacjenta z trzema właściwościami i utwórz tablice przechowująca obiekty tej klasy.
  2. Wypisujesz najpierw wszystkie imiona, potem wszystkie nazwiska i potem wiek. Zgodnie z poleceniem powinieneś wypisać od razu wszystkie dane pacjenta.
  3. Masz wypisać w kolejności odwrotnej do wczytania czyli np.:
    foreach (var x in tab1.Reverse())
    {
        ...
    }
  1. Te sorty i reversy po wczytaniu danych są niepotrzebne.
  2. Wyszukiwanie najstarszego i najmłodszego masz dobrze(trzeba to oczywiście zmienić, żeby wykorzystywało jedną tablicę zgodnie z tym co napisałem w p.1), można to zrobić ładniej przez lambdy, ale na tym poziomie wystarczy tak jak jest. Podobnie ze średnią.
  3. Tworzysz tablice przechowujące 11 elementów, a ma być 10.
2

Dlaczego utrudniasz sobie życie pisząc nazwy zmiennych które są "kodami" i trzeba analizować kod aby dowiedzieć się co tam jest przechowywane?

String[] tab1 =new String[11];
String[] tab2 = new String[11];
int[] tab3 = new int[11];

A można prościej

string[] names = new string[11];
string[] surnames = new string[11];
int[] ages = new int[11];

Poza tym w tablicach 1 element jest pod indeksem 0. A przy deklaracji podajesz rozmiar.
Czyli tablica 10 imion powinna wyglądać tak:

string[] names = new string[10];

A pętla która uzupełnia dane, tak:

for(int i = 0; i < names.length; i++)
{
	names[i] = [wartosc]
}

Dodatkowo za każdym razem sortujesz tablice, a powinnaś to zrobić po wczytaniu wszystkich pacjentów.

string[] names = new string[10];
string[] surnames = new string[10];
int[] ages = new int[10];

for(int i = 0; i < 10; i++)
{
    // Wczytaj dane
}

names = names.Reverse().ToArray();
surnames = surnames.Reverse().ToArray();
ages = ages.Reverse().ToArray();

A teraz popatrz jak C# ułatwia życie:

int max = ages.Max();
int min = ages.Min();
double average = ages.Average();

I tyle, masz wszystko co potrzebujesz.

No chyba że musisz napisać algorytmy sama...

Edit: Tak jak kolega wyżej mówi, powinnaś użyć klasy albo struktury dla pacjentów.

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