• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z programowania w C

Object Storage Arubacloud
0 głosów
138 wizyt
pytanie zadane 10 stycznia 2021 w C i C++ przez grzecho123 Początkujący (450 p.)

Witam!

Treść zadania to:

1. Napisz dwie funkcje, przyjmujące jako argumenty wskaźnik typu int, na pierwszy element tablicy, oraz element za ostatnią wartością tablicy. Pierwsza funkcja ma wypełnić tablicę liczbami, druga natomiast wyświetlić wszystkie wartości. UWAGA: Wykorzystaj arytmetykę wskaźnikową - jak zapewne czytałeś, dodawanie do adresu liczby całkowitej, powoduje przeskok o odpowiednią ilość bitów, która reprezentuje dany typ. Skorzystaj z tej wiedzy przy budowaniu pętli - możesz inkrementować pierwszy adres po każdym obiegu i sprawdzać, czy nie jest on równy elementowi za tablicą. Dzięki temu przeiterujesz całą tablicę. Funkcja wyświetlająca ma wyłuskiwać wartość spod zmiennej wskaźnika lokalnego, który inkrementujesz w pętli.

I oczywiście mój kod, który stworzyłem, ale nie działa

#include <stdio.h>
#include <stdlib.h>
#define N 10

void funkcja1(int *elem1, int *elemost)
{
    int i=0;
    while(elem1!=elemost)
    {
        *(elem1+i)=i;
        i++;
    }
}

void funkcja2(int *elem2, int *elemost2)
{
    int i=0;
    while(elem2!=elemost2)
    {
        printf("wartosc tab[%d]: %d\n",i,*(elem2+i));
        i++;
    }
}


int main()
{
    int *wskaznik[N];
    funkcja1(wskaznik,wskaznik[N-1]);
    funkcja2(wskaznik,wskaznik[N-1]);
    return 0;
}

Bardzo prosiłbym o pomoc, gdyż nie do końca rozumiem tego zadania.

1 odpowiedź

0 głosów
odpowiedź 10 stycznia 2021 przez Oscar Nałogowiec (29,290 p.)
wybrane 10 stycznia 2021 przez grzecho123
 
Najlepsza

Nie zmieniasz/inkrementujesz wskaźnika, a używasz go w warunku pętli.

Napisałeś:

    while(elem1!=elemost)
    {
        *(elem1+i)=i;
        i++;
    }

a ma być (zgodnie z treścią zadania):

    while(elem1!=elemost)
    {
        *elem1++=i++;
    }

 

Źle wywołujesz funkcje, masz użyć arytmetyki czyli zamiast tab[N], wywołąnie powinno mieć postać tab+N. Tak jak jest nie skompiluje się bo jest niezgodność typów.

komentarz 10 stycznia 2021 przez grzecho123 Początkujący (450 p.)

Nie rozumiem jednej rzecz w tym kodzie

while(elem1!=elemost)
{
    *elem1++=i++;
}

bo z tego wynika, że tak jakby przy pierwszym uruchomieniu pętli elementowi tab[1] zostanie przypisana wartość 1 a jakoś elementowi tab[0] jest przypisana wartość 0 i nie rozumiem jak to mozliwe skoro odrazu została zinkrementowana tablica i element "i". Oczywiście zrobiłem wszystko tak jak mówiłeś i działa tylko tej jednej rzeczy nie rozumiem.

1
komentarz 10 stycznia 2021 przez Oscar Nałogowiec (29,290 p.)

Inkrementacji można używać na dwa sposoby:

i++ - postinkrementacja - najpierw używana jest dana zmienna (stara jej wartość), a po wszystkim jest inkrementowana.

++i - preinkrementacja - wartość zmiennej jest zwiększana najpierw a potem robi się resztę.

Więc gdy elem1 pokazuje na tab[0], a zmienna i == 0

to wyrażenie *elem1++ = i++ oznacza że do tab[0] zostaje wpisane 0, a potem elem1 zostaje przestawione na kolejny element tab, a zmienna przyjmuje wartość 1.

komentarz 10 stycznia 2021 przez grzecho123 Początkujący (450 p.)
Aaa ok teraz rozumiem dzięki za wyjasnienie.

Podobne pytania

0 głosów
2 odpowiedzi 976 wizyt
0 głosów
2 odpowiedzi 944 wizyt
0 głosów
1 odpowiedź 208 wizyt
pytanie zadane 8 grudnia 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...