szeejdi Temat założony przez niniejszego użytkownika |
[C]Podstawienie wartości wskaźnikowi typu float » 2018-01-17 19:28:17 Witam, Mam za zadanie napisać program, który: 1) Pobiera od użytkownika rozmiar tablicy tworzonej dynamicznie 2) Pobiera wyrazy tablicy 3) Wyświetla je 4) Sumuje ich wartości Mam problem z podpunktem 4. Wersja z sumowaniem jako int: #include <stdio.h> #include <stdlib.h>
void utworz( float * x, int n ) { int i, j; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "Podaj A[%d,%d]=", i, j ); scanf( "%f", x++ ); } } } void czytaj( float * x, int n ) { int i, j; printf( "Elementy tablicy A\n" ); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "A[%d,%d]=%2.2f ", i, j, *( x++ ) ); printf( "\n" ); } } } int sumuj( float * x, int n, int * wsuma, int * r ) { int i, j; int suma = 0; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { suma = suma +( *( x++ ) ); } } * wsuma = suma; * r =( n * n ); } int main() { float * a; int * wsuma; int n; int * r; printf( "Podaj rozmiar tablicy:" ); scanf( "%d", & n ); a =( float * ) malloc(( n * n ) * sizeof( float ) ); utworz( a, n ); czytaj( a, n ); sumuj( a, n, & wsuma, & r ); printf( "Suma elemenow %d tablicy wynosi: %d", r, wsuma ); free( a ); return 0; }
Nie działająca wersja z sumowaniem zapisywanym jako float: #include <stdio.h> #include <stdlib.h>
void utworz( float * x, int n ) { int i, j; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "Podaj A[%d,%d]=", i, j ); scanf( "%f", x++ ); } } } void czytaj( float * x, int n ) { int i, j; printf( "Elementy tablicy A\n" ); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "A[%d,%d]=%2.2f ", i, j, *( x++ ) ); printf( "\n" ); } } } int sumuj( float * x, int n, float * wsuma, int * r ) { int i, j; float suma = 0.0; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { suma = suma +( *( x + 1 ) ); } } * wsuma = suma; * r =( n * n ); } int main() { float * a; float * wsuma; int n; int * r; printf( "Podaj rozmiar tablicy:" ); scanf( "%d", & n ); a =( float * ) malloc(( n * n ) * sizeof( float ) ); utworz( a, n ); czytaj( a, n ); sumuj( a, n, & wsuma, & r ); printf( "Suma elemenow %d tablicy wynosi: %f", r, wsuma ); free( a ); return 0; }
Z góry bardzo dziękuję za pomoc i wytłumaczenie problemu, dopiero co zaczynam przygodę z C na studiach, dlatego nie skreślajcie mnie od razu jak znajdziecie jakies "amatorskie" błędy. Pozdrawiam |
|
YooSy |
» 2018-01-17 20:42:31 Funkcja sumuj nic nie zwraca mimo deklaracji, że ma zwrócić. suma = suma +( *( x + 1 ) ); |
Dodajesz wciąż ten sam wyraz tablicy. |
|
szeejdi Temat założony przez niniejszego użytkownika |
» 2018-01-17 20:55:45 Masz rację, oczywiście 1 poinno być zamienione na ''i'' albo x++. Jednakże nadal to nie rozwiązuje problemu :/ |
|
Lora |
» 2018-01-17 21:41:34 A return dodałeś? edit: Chociaż w sumie jest on niepotrzebny. |
|
YooSy |
» 2018-01-17 21:44:02 sumuj( a, n, & wsuma, & r ); |
Przekazujesz do funkcji adres na wskaźniki * wsuma oraz * r , a funkcja przyjmuje wskaźnik, a nie wskaźnik do wskaźnika. |
|
szeejdi Temat założony przez niniejszego użytkownika |
» 2018-01-17 21:50:39 hm nie za bardzo rozumiem, skoro podstawienie "r" działa normalnie to czemu podstawienie wartości "suma" za wskaźnik *wsuma nie działa? |
|
YooSy |
» 2018-01-17 22:01:13 Zadeklaruj zmienne, zamiast wskaźników float * a; float wsuma; int n; int r; oraz tutaj suma = suma +( *( x +( i * n ) + j ) ); . Oczywiście funkcja sumuj powinna mieć zwracany pusty typ void . Żeby używać wskaźnika, trzeba go na coś ustawić. Używanie nieustawionego wskaźnika jest UB. |
|
szeejdi Temat założony przez niniejszego użytkownika |
» 2018-01-17 22:21:38 Teraz jest ok i działa :D Bardzo dziękuję za pomoc :) #include <stdio.h> #include <stdlib.h>
void utworz( float * x, int n ) { int i, j; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "Podaj A[%d,%d]=", i, j ); scanf( "%f", x++ ); } } } void czytaj( float * x, int n ) { int i, j; printf( "Elementy tablicy A\n" ); for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { printf( "A[%d,%d]=%2.2f ", i, j, *( x++ ) ); printf( "\n" ); } } } void sumuj( float * x, int n, float * wsuma, int * r ) { int i, j; float suma = 0.0; for( i = 0; i < n; i++ ) { for( j = 0; j < n; j++ ) { suma = suma +( *( x +( i * n ) + j ) ); } } * wsuma = suma; * r =( n * n ); } int main() { float * a; float wsuma; int n; int r; printf( "Podaj rozmiar tablicy:" ); scanf( "%d", & n ); a =( float * ) malloc(( n * n ) * sizeof( float ) ); utworz( a, n ); czytaj( a, n ); sumuj( a, n, & wsuma, & r ); printf( "Suma elemenow %d tablicy wynosi: %f", r, wsuma ); free( a ); return 0; }
|
|
« 1 » |