Zagwozdka wskaźniki w tablicy C++

0

Nie do końca rozumiem co ode mnie jest wymagane.

Zadanie 1.
Napisz program, w którym zdefiniowana zostanie jednowymiarowa dziesięcioelementowa tablica liczb całkowitych a. Tablica ma zostać wypełniona wartościami losowymi z zakresu <1,100>. Elementy tablicy mają zostać wyświetlone na ekranie. Odwołanie do poszczególnych elementów tablicy powinno wyglądać następująco a[0]+i, gdzie i wskazuje na poszczególny element tablicy.

Zadanie 2
Zadeklaruj wskaźnik na:
a)zmienną typu integer;
b)zmienną typu double;
c)zmienną typu float;
d)tablicę liczb typu integer o rozmiarze N, gdzie N – stała;
W programie głównym należy utworzyć zmienne dynamiczne odpowiadające zadeklarowanym typom oraz zainicjować utworzone zmienne wartościami losowymi lub wartościami wprowadzanymi z klawiatury. Zawartość zmiennych ma zostać wyprowadzona na ekran. Przed zakończeniem programu należy zwolnić pamięć.

Zadanie 3.
Utwórz dynamiczną tablicę struktur o rozmiarze N, gdzie N jest podane przez użytkownika w trakcie działania programu.
typedef struct {
int id;
char imie[20];
char nazwisko[20];
int wiek;
} tosoba;
Opracuj funkcję, która inicjuje tablicę losowymi danymi lub danymi wprowadzanymi z klawiatury. Przetestuj opracowaną funkcję w programie głównym. Przed zakończeniem programu należy zwolnić pamięć.

Zadanie 4.
Napisz program, który korzysta z dwóch tablic - jedna to tablica liczb całkowitych, druga to tablica wskaźników na liczby całkowite. Napisz funkcje, która ustala wartości losowe pierwszej tablicy. Przeprowadź proste przeszukiwanie tablicy liczb w celu odszukania najmniejszej i zapamiętaj jej wskaźnik w tablicy wskaźników. Potem poszukaj kolejnej, i ponownie zapamiętaj jej wskaźnik na następnym miejscu w tablicy wskaźników. W ten sposób utwórz tablicę wskaźników do swoich pierwotnych danych, ale wskazujących w taki sposób, aby dane zostały odczytane za ich pomocą w uporządkowany sposób.

Zadanie 5.
Korzystając ze struktury zdefiniowanej w zadaniu 3 zdefiniuj tablicę oraz opracuj następujące
funkcje:
a) tworzącą dynamicznie element typu tosoba,
b) wyprowadzającą zawartość tablicy struktur na ekran,
c) znajdującą pozycję pierwszego elementu tablicy o ustalonej wartości pola nazwisko,
d) sortującą zawartość tablicy według nazwiska,
e) usuwającą pierwszy napotkany element tablicy o podanym nazwisku.
Opracowane funkcje należy przetestować w programie głównym. Przed zakończeniem
programu zwolnić pamięć.

Mógłby mi ktoś coś doradzić.

1

Ale co, nie rozumiesz polecenia? Są napisane bardzo przejrzyście dla każdego, kto ogarnia podstawy materiału.

PS: przepisałeś te polecenia? ten kawałek z a[0]+i to ewidentny błąd

0

Moje 1 zadanie tak napisałem.

int main()
{
    rand(time(NULL));
    int i, a, n = 10;
    int tab[n];

    int* wsk = &tab;
    for (i = 0; i <= n; i++) {
        tab[i] = rand() % 100 + 1;
        cout << tab[i] << "  ";
    }
}

Gdzie i jaki błąd popełniłem.

PS: Skopiowałem polecenia jak są

0

Poza użyciem VLA (zadeklaruj tablicę po prostu jako 10-elementową), masz off-by-one, bo używasz <= zamiast < w warunku fora.

Na przyszłość możesz też przeczytać dlaczego nie używać rand(), ale na potrzeby tego zadania jest ok.

0

Tablicę możesz accessować na kilka sposobów:

int a[5] = {11, 22, 33, 44, 55};

std::cout << a[4] << '\n';       // sposob 1
std::cout << *(a + 4) << '\n'; // sposob 2
std::cout << 4[a] << '\n';       // sposob 3

Być może osobie układającej zadanie 1sze chodziło o skorzystanie z sposobu 2?

0

Zadanie 4

{
    ;

    srand(time(NULL));
    int i, a;
    int tab[10];

    cout << "Losowe liczby" << endl;

    for (i = 0; i < 10; i++) {
        tab[i] = rand() % 100 + 1;
        cout << tab[i] << "   ";
    }

    cout << endl;

    int* tablica = new int[10];

    for (int i = 10; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (tab[j] < tab[j + 1]) {
                int liczba = tab[j + 1];
                tab[j + 1] = tab[j];
                tab[j] = liczba;
                *tablica = tab[j];
                *tablica++;
            }
        }
    }
    for (int i = 10; i > 0; i--) {
        cout << (int)*tablica << "    ";
        *tablica++;
    }

    delete[] tablica;
    return 0;
}

Gdzie popełniłem błąd.

0

Nie masz drugiej tablicy - tablicy wskaźników.

0

struct osoba {
int id; char imie[20]; char nazwisko[20]; int wiek;
};

int tworz(int ile,struct osoba)
{
osoba *wskaznik = new osoba [ile];

for (int i=1; i<ile; i++) {
	
	cout<<"Osoba   "<<i<<endl;
    cout << "id             ";
    cin >> wskaznik[i].id; 
	
	cout << "imie:          ";
     cin>>wskaznik[i].imie;

    cout << "nazwisko       ";
    cin>>wskaznik[i].nazwisko;

    cout << "wiek           ";
    cin >> wskaznik[i].wiek;
}	

}
int wyswietl(int ile,int wskaznik[],struct osoba)
{osoba *wskaznik = new osoba [ile];
for (int j=1; j<ile; j++) {
cout <<endl<< "Id " << (wskaznik[j]).id;
cout <<endl<< "imie " << (wskaznik[j]).imie;
cout <<endl<< "nazwisko " << (wskaznik[j]).nazwisko;
cout <<endl<< "wiek: " << (wskaznik[j]).wiek;
}}
int znajdz(int ile,struct osoba)
{
cout<<"znajduje pierwszy element nazwiska"
}
int sortowanie(wskaznik[].nazwisko, int ile) {
string lastname;
int i; int j;
for (i = 1; i < ile; ++i) {
lastname = wskaznik[i].nazwisko;
for (j = i – 1; j >= 0 && wskaznik[j].nazwisko > lastname; –j) {
wskaznik[j+1].nazwisko = wskaznik[j].nazwisko;
}
wskaznik[j+1].nazwisko = lastname;
}}
int usuwanie(int ile,struct osoba)
{
}

Po części tak wygląda zad 5.
Czy jestem na dobrym tropie czy nie.

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