Wskaźniki cd. funkcje i przekazywanie wartosci.

0

Ostro sie ucze takze znowu na mojej drodze pojawily sie nowe pytania :P
Mam pewne zadanie i próbuje je analizowac i co cos pisac:d

Napisać program, który wykonuje operacje matematyczne na liczbach
przekazanych przez wskaźniki, a wprowadzanych przez
użytkownika. Każda operacja powinna stanowić oddzielną funkcję, która
zwraca wartość logiczną prawdy, gdy operacja została wykonana poprawnie. Na
liście argumentów powinny znajdować: się wskaźnik do zmiennej wynikowej jak
i wskaźnik/wskaźniki do wartości argumentów. Funkcje powinny uwzględniać możliwość przekazania wskaźnika NULL, jako wartości jednego z argumentów.

Czyli mam napisac jakies fcje typu dodawanie, mnozenie ktorych argumetami beda wskazniki do zmiennych.

Każda operacja powinna stanowić oddzielną funkcję, która
zwraca wartość logiczną prawdy, gdy operacja została wykonana poprawnie.

I tu problem. Czyli mam nie wzracac wyniku tylko logiczna prawde?? Czyli logiczna prada to "jedynka"?

Na liście argumentów powinny znajdować: się wskaźnik do zmiennej wynikowej jak i wskaźnik/wskaźniki do wartości argumentów.

Na liscie argumentow funkcji? Przeciez w liscie argumetow funkcji deklaruje sie zmienne ktore funkcja przyjmuje to jak tam mam zrobic wskaznic do zmiennej wynikowej?

Funkcje powinny uwzględniać możliwość przekazania wskaźnika NULL, jako wartości jednego z argumentów.

Tego to wgl nie czaje, mozliwosc przekazania wskaznika NULL?

Napisalem takie cos ale nie jestem pewnie czy ide w dobrym kierunku wiec prosze o pomoc.

int dodawanie(int *x, int *y);

 int main()
 {
 	int a, b;
 	puts("wpisz wartosci a i b:");
 	scanf("%d %d", &a, &b);
 	
 	printf("%d + %d= %d", a,b,dodawanie(&a, &b));
}


 int dodawanie(int *x, int *y)
 {
 	
	int wynik;
	int *wskwynik=&wynik;
	*wskwynik=*x+*y;
 	
 	return *wskwynik;
 
 }
0

Należałoby sprawdzić, czy adresy wskaźników nie są NULL:

int dodawanie(int *wynik, const int *x, const int *y)
{
    int ok = 0;
    if (wynik != NULL && x != NULL && y != NULL)
    {
        *wynik = *x + *y;
        ok = 1;
    }
    return ok;
}

W nieco bardziej zaawansowanej wersji mógłbyś dodatkowo sprawdzić, czy wynik mieści się w granicach wartości dla danego typu, w tym przypadku int.

2

idziesz mniej więcej w dobrym kierunku.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool addition(const int *a, const int *b, int *result)
{
	if(!a || !b || !result) return false;
	(*result) = (*a) + (*b);
	return true;
}

bool division
(const int *dividend, const int *divisior, int *result)
{
	if(!dividend || !divisior || !result || (*divisior) == 0)
		return false;
	(*result) = (*dividend) / (*divisior);
	return true;
}

int main(void) {
	int x = 5;
	int y = 10;
	int *y_ptr = &y;
	int result;

	if(addition(&x,&y,&result))
		printf("WYNIK: %d\n",result);
	else
		printf("nie udalo sie\n");

	if(division(y_ptr,&x,&result))
		printf("WYNIK: %d\n",result);
	else
		printf("nie udalo sie\n");

	/* przekazemy teraz wskaźnik o wartości NULL */
	y_ptr = NULL;
	if(addition(&x,y_ptr,&result))
		printf("WYNIK: %d\n",result);
	else
		printf("nie udalo sie\n");

	/* sprobojemy podzielic przez zero */
	y = 0;
	if(division(&x,&y,&result))
		printf("WYNIK: %d\n",result);
	else
		printf("nie udalo sie\n");

	return 0;
}

zostalo Ci pobieranie wartości od użytkownika, odejmowanie i mnożenie.

2

Ponieważ widzę pracę własną, a zadanie nie jest skomplikowane, wstawiam gotowca.

#include <stdio.h>

int add(int *result, const int *a, const int *b){
	int isValid = (result && a && b);
	if(isValid) *result = *a + *b;
	return isValid;
}

int main(void) {
	int a, b, result = 0, isValid;
	scanf("%d %d ", &a, &b);
	
	isValid = add(&result, &a, &b);
	printf("IsValid? %d, result = %d\n", isValid, result);
	
	isValid = add(&result, &a, NULL);
	printf("IsValid? %d, result = %d", isValid, result);
	return 0;
}

in:
30 15
out:

IsValid? 1, result = 45
IsValid? 0, result = 45
0

Dzieki dzieki tyle ze musze mocno analizowac wasze kody bo nie sa na moim poziomie ;D

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