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

Wskaźniki problem z wyswietlaniem

Aruba Cloud - Virtual Private Server VPS
0 głosów
97 wizyt
pytanie zadane 4 grudnia 2024 w C i C++ przez adam234345 Początkujący (400 p.)

Hej mam za zadanie napisać "funkcję, która jako argumenty przyjmuje dwa wskaźniki i działa tak, że oblicza sumę wartości tych wskaźników. Wywołaj tę funkcję by wartości w co drugiej kolumnie zmienić na sumy dwóch sąsiednich w wierszu komórek."

Zrobiłem funkcje ale wyświetlają się tylko te kolumny, które są sumą dwóch sąsiadujących, a chce żeby te sąsiadujące też się wyświetlały, co zrobić aby tak było? 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>





void sumaws(int *x, int *y)
{
    int starex=*x;
    int starey=*y;
    *x=*y;
    *y=starex+starey;

}


int main()
{

    srand(time(0));

    int n;
    printf("Podaj n \n");
    scanf("%d", &n);
    
    printf("\n");

	int **p;
    p=(int**)malloc(n*sizeof(int*));

    for(int i=0; i<n; i=i+1)
    {
       *(p+i)=(int*)malloc(n*sizeof(int));
    }



	for(int i=0; i<n; i=i+1)
    {
        for(int j=0; j<n; j=j+1)
    {
       *(*(p+i)+j)=-9+rand()%(10-(-9));
        printf("%2.d ", *(*(p+i)+j) );
    }
        printf("\n");
    }

      printf("\n\n");


    for(int i=0; i<n; i=i+1)
    {
        for(int j=1; j<n; j=j+2)
    {

        sumaws(   (*(p+i)+j-1) ,  (*(p+i)+j+1)   );

        printf("%2.d ", *(*(p+i)+j+1));
    }
        printf("\n");
    }






   for(int i=0; i<n; i=i+1)
    {
        free(*(p+i));
    }

    free(p);






    return 0;
}



 

1 odpowiedź

0 głosów
odpowiedź 4 grudnia 2024 przez adrian17 Mentor (352,580 p.)

Po pierwsze, z opisu zrozumiałem że funkcja ma liczyć sumę wartości pod wskaźnikami, ale u Ciebie ta funkcja również zmienia zawartość wskaźników, co nie brzmi jak coś o co pytali.

Po drugie, obecnie sumujesz wartość lewą i prawą i wynik przypisujesz do prawej, a z treści nie wynikało aby żeby zmienić komórkę między nimi?

Po trzecie, 

Zrobiłem funkcje ale wyświetlają się tylko te kolumny, które są sumą dwóch sąsiadujących, a chce żeby te sąsiadujące też się wyświetlały, co zrobić aby tak było?

Wypisać je? :P Teraz wypisujesz wynik sumowania i tyle. Skoro masz już napisany kod który wypisuje zawartość macierzy, to czemu po prostu go nie użyjesz drugi raz? To znaczy:

// wypelnij macierz
// wypisz macierz
// posumuj wartosci
// wypisz macierz

A swoją drogą, znowu tutaj wiele rzeczy na które zwracaliśmy uwagę wcześniej, jak formatowanie i to nieszczęsne `*(p+i)` przez które ten kod daje wrażenie jakbyś nie chciał żeby ktokolwiek poza Tobą mógł go przeczytać :/

komentarz 4 grudnia 2024 przez adam234345 Początkujący (400 p.)
`*(p+i)`

co do tego zapisu to jednym z podpunktów jest "Zmodyfikuj rozwiązanie z podpunktu b) tak, aby w kodzie nie pojawiał się znak ”[”." dlatego musze to w ten właśnie sposób pisać
komentarz 4 grudnia 2024 przez adam234345 Początkujący (400 p.)

@adrian17, chodzi o to żeby zamiast 11 wyświetlało sumę liczb po prawej i lewej stronie, próbowałem to zapisać i nie wiem, jaki sposób był by najlepszy

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>





void sumaws(int *x, int *y)
{
    int starex=*x;
    int starey=*y;
    *x=*y;
    *y=starex+starey;

}


int main()
{

    srand(time(0));


	int **p;
    p=(int**)malloc(n*sizeof(int*));

    for(int i=0; i<n; i=i+1)
    {
       *(p+i)=(int*)malloc(n*sizeof(int));
    }



	for(int i=0; i<n; i=i+1)
    {
        for(int j=0; j<n; j=j+1)
    {
       *(*(p+i)+j)=1+rand()%(10-(1));
        printf("%2.d ", *(*(p+i)+j) );
    }
        printf("\n");
    }

      printf("\n\n");


    for(int i=0; i<n; i=i+1)
    {
        for(int j=1; j<n; j=j+2)
    {

        *(*(p+i)+j)=11;
        //sumaws(   *(*(p+i)+j-1) ,  *(*(p+i)+j+1)   );
        //printf("%2.d ", *(*(p+i)+j+1) );

    }
        printf("\n");
    }


	for(int i=0; i<n; i=i+1)
    {
        for(int j=0; j<n; j=j+1)
    {
        printf("%2.d ", *(*(p+i)+j) );
    }
        printf("\n");
    }

      printf("\n\n");


   for(int i=0; i<n; i=i+1)
    {
        free(*(p+i));
    }

    free(p);






    return 0;
}



 

Podobne pytania

0 głosów
0 odpowiedzi 117 wizyt
pytanie zadane 2 grudnia 2024 w C i C++ przez adam234345 Początkujący (400 p.)
0 głosów
1 odpowiedź 279 wizyt
0 głosów
1 odpowiedź 300 wizyt

93,328 zapytań

142,323 odpowiedzi

322,397 komentarzy

62,658 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...