Zadanie 6!
Co mogę powiedzieć o tych zadaniach... Łatwe, ale pouczające, bo było kilka błędów których się nie spodziewałem. Specjalnie zostawiłem Ci zadania nieparzyste, tak byś sam mógł nad nimi popracować. Są trudniejsze od tych które zrobiłem, ale to dobrze bo dzięki temu postawisz sobie wyzwanie, a tylko tak możesz się rozwijać. Pamiętaj, że użytkownicy forum i Ja postaramy Ci pomóc z problemem w kodzie więc nawet jeśli coś nie będzie chciało działać - wal śmiało :)
///////////////////////////////////////////////////////////////////////
// main.cpp
//
// Zadanie 6:
// Napisać funkcję Znajdź(), która w tablicy wyszukuje dany element i zwraca jego indeks
// (o ile element zostanie znaleziony). W przypadku kilku elementów
// o wartości równej wartości wyszukiwanej, funkcja powinna zwracać
// indeks ostatniego znalezionego elementu.
// Argumentami funkcji powinny być: tablica oraz poszukiwany element.
// Do przemieszczania się po kolejnych elementach tablicy wykorzystać wskaźniki.
///////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
///////////////////////////////////////////////////////////////////////
//wczytuje liczby typu int do tablicy
//int* tab - wskaźnik na tablicę typu int
//size_t size - rozmiar tablicy w bajtach (sizeof(tab))
void read_array(int* tab, size_t size);
///////////////////////////////////////////////////////////////////////
//wypisuje na ekran kolejno te liczby, które mają wszystkie cyfry parzyste
//int* tab - wskaźnik na tablicę typu int
//size_t size - rozmiar tablicy w bajtach (sizeof(tab))
void print_array(int* tab, size_t size);
///////////////////////////////////////////////////////////////////////
//zwraca indeks ostatniej znalezionej komórki równej co do wartości zmiennej element
//int* tab - wskaźnik na tablicę typu int
//size_t size - rozmiar tablicy w bajtach (sizeof(tab))
//int element - wartość poszukiwana w tablicy
size_t find_array(int* tab, size_t size, int element);
///////////////////////////////////////////////////////////////////////
int main(void)
{
const int tab_size = 5;
int tab[tab_size];
int val;
int idx;
printf("Podaj liczby do sprawdzenia:\n");
read_array(tab, sizeof(tab));
printf("Podaj szukaną cyfrę:\n");
scanf("%d", val);
idx = find_array(tab, sizeof(tab), val);
if(idx == -1)
{
printf("Nie znaleziono takiego elementu");
}
else
{
printf("Wartość jest pod indeksem: %d", idx);
}
return 0;
}
///////////////////////////////////////////////////////////////////////
void read_array(int* tab, size_t size)
{
if(!tab) return;
size /= sizeof(&tab[0]);
for(size_t i = 0; i < size; i++)
scanf("%d", &tab[i]);
}
///////////////////////////////////////////////////////////////////////
void print_array(int* tab, size_t size)
{
if(!tab) return;
size /= sizeof(&tab[0]);
for(size_t i = 0; i < size; i++)
{
int var = +tab[i];
int num_digts = 0;
int num_parity_digts = 0;
while(var)
{
++num_digts;
if((var % 10) % 2 == 0)
++num_parity_digts;
var /= 10;
}
if(num_digts == num_parity_digts || tab[i] == 0)
printf("%d\n", tab[i]);
}
}
///////////////////////////////////////////////////////////////////////
size_t find_array(int* tab, size_t size, int element)
{
//jeśli do funkcji podany jest pusty wskaźnik, wróć
if(!tab) return;
size /= sizeof(&tab[0]);
//zmienna trzyma indeks komórki zawierającej tą samą wartość co element
int idx = -1;
//przez wszystkie elementy tablicy
for(size_t i = 0; i < size; i++)
{
//jeśli tablica pod danym indeksem jest równa wartości szukanej
//ustaw zmienną idx na ten indeks.
//Jeśli program później w tablicy znowu znajdzie wartość równą zmiennej element
//to poprostu nadpisze ją nowym indeksem w ten sposób zawsze będzie najdalszy indeks
if(tab[i] == element) idx = i;
}
//zwróć znaleziony indeks. Jeśli go nie znaleziono to wartość idx pozostała równa -1
//czyli zwróci błędny indeks, dokładnie tak jak chcemy.
return idx;
}