Skocz do zawartości

zadanie z C, wskaźniki i tablice


pysa6

Recommended Posts

Mam takie zadanie: 

Zadeklaruj tablicę o 20 elementach. Wypełnij ją kolejnymi wartościami od 1 do 20 włącznie.

Wydrukuj tablicę na ekranie.

Zadeklaruj 3 zmienne wskaźnikowe, dowiąż je kolejno do 5, 10, 15 elementu tablicy.

Wartość pod pierwszym wskaźnikiem pomnóż przez 100. Wartość pod drugim wskaźnikiem zwiększ o 50.
Wartość pod trzecim wskaźnikiem pomnóż przez -1. Wydrukuj tablicę na ekranie.

(Jeśli wszystko się udało, to w tablicy będą wartości zedytowane).

 

To mój kod:


#include <stdio.h>

int main()
{
    int tab[20];
    for(int i = 0; i<20; i++)
    {
        tab[i] = i+1;
    }
    for(int i = 0; i<20; i++)
    {
        printf("%d ", tab[i]);
    }
    putchar('\n');
    
    int *p1 = tab[5];
    int *p2 = tab[10];
    int *p3 = tab[15];
    
    *p1 = *p1 * 100;
    *p2 = *p2 + 50;
    *p3 = *p3 * (-1);
    
    for(int i = 0; i<20; i++)
    {
        printf("%d ", tab[i]);
    }

    return 0;
}

Dopiero zaczynam naukę programowania, nie wiem dlaczego nie działa?

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

W Twoim kodzie są kilka błędów, które uniemożliwiają poprawne działanie programu.

Po pierwsze, w linijkach:

 
int *p1 = tab[5]; int *p2 = tab[10]; int *p3 = tab[15];

używasz operatora indeksowania tablicy, ale powinieneś użyć operatora adresowania (&), aby wskaźnik mógł wskazywać na odpowiedni element tablicy. Zamiast tego powinieneś napisać:

 
int *p1 = &tab[5]; int *p2 = &tab[10]; int *p3 = &tab[15];

Po drugie, w linijkach:

 
*p1 = *p1 * 100; *p2 = *p2 + 50; *p3 = *p3 * (-1);

powinieneś zaczynać od zmiennej wskazującej (*p1, *p2, *p3), a dopiero potem przypisywać do niej nową wartość. W innym przypadku kompilator próbuje przypisać do adresu, który jest przechowywany przez wskaźnik, co jest błędem. Zamiast tego powinieneś napisać:

 
*p1 = (*p1) * 100; *p2 = (*p2) + 50; *p3 = (*p3) * (-1);

Po trzecie, w linijkach:

 
for(int i = 0; i<20; i++) { printf("%d ", tab[i]); }

powinieneś używać operatora indeksowania tablicy, aby wydrukować jej poszczególne elementy. W przeciwnym razie kompilator próbuje wydrukować adres, na który wskazują wskaźniki. Zamiast tego powinieneś napisać:

 
for(int i = 0; i<20; i++) { printf("%d ", tab[i]); }

Jeśli poprawisz te błędy, to Twój kod powinien działać poprawnie.

Edytowano przez EMUSING
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...