ďťż

Ładny brzuch

Mam napisać program: zaimplementować funkcje która jako parametr przyjmuje tablice liczb rzecz., jej rozmiar jako drugi parametr i zwraca różnice między elementami max i min. W programie głównym należy utworzyć 20 elem. tablice o war. rzeczywistych. Zainicjować jej elementy wartościami od 0-30 a następnie przekazać ją do utworzonej funkcji i wyświetlić na ekranie tą różnice.
Zrobiłem już troche lecz nie wiem jak to skończyć i gdzie wsadzic wyliczanie max i min (czy pod funkcją czy w programie głównym). Bardzo proszę o pomoc w dokończeniu programu.

#include<stdio.h> #include<stdlib.h> #include<time.h> int funkcja(int tab[], int rozmiar); int main () { int tab[20]; int i; srand(time(0)); for(i=0;i<rozmiar;i++) { tab[i]= rand()/(RAND_MAX + 1.0) * 31; } for(i=0;i<rozmiar;i++) { printf("tablica:%d\n",tab[i]); } system ("pause"); return 0; } /* for (i=1;i<20;i++) { if (tab[i]>max) max=tab[i]; else if (tab[i]<min) min=tab[i]; */



Trochę błędów w tym kodzie jest ;) i moim zdaniem program powinien wyglądać tak:
void funkcja(int *tab, int rozmiar, int *max, int *min) { for (i=0;i<rozmiar;i++) { if (tab[i]>*max) *max=tab[i]; else if (tab[i]<*min) *min=tab[i]; } int main () { int tab[20]; int i; int rozmiar=20; int max, min; srand(time(NULL)); for(i=0;i<rozmiar;i++) { tab[i]= rand()/(RAND_MAX + 1.0) * 31; } max=min=tab[0]; funkcja(tab, rozmiar, &max, &min); for(i=0;i<rozmiar;i++) { printf("tablica:%d\n",tab[i]); } printf("max-min: ",max-min); system ("pause"); return 0; }
Mam nadzieję, że się nie sypnęłam w przekazywaniu parametrów do funkcji, bo mi się niestety trochę z c++ myli. Myślę, że już ten kod potrafisz przerobić do właściwej formy.

a ja mysle ze to powinno tak byc

pozwole troche poprawic Twoj kod Katarina

int funkcja(int *tab, int rozmiar) { int min = 30; int max = 0; for (i=0;i<rozmiar;i++) { if (tab[i]>max) max=tab[i]; if (tab[i]<min) min=tab[i]; return max-min; } int main () { int tab[20]; int i; int rozmiar=20; srand(time(NULL)); for(i=0;i<rozmiar;i++) { tab[i]= rand() % 31; //tamten rand cos mi sie nie podobal ;) } printf("tablica:"); for(i=0;i<rozmiar;i++) { printf(" d",tab[i]); } printf("\nmax-min: %d\n", funkcja(tab, rozmiar)); system ("pause"); return 0; }
Użytkownik fernandez edytował ten post 11 luty 2010, 22:27
Jedynie drobna poprawka
int funkcja(int *tab, int rozmiar) { int min = 0; int max = 0; if(rozmiar > 0) { min = tab[0]; max = tab[0]; } else { return -9999;//informacja o zerowym rozmiarze tablicy wejsciowej } .... }
Użytkownik imcpan edytował ten post 12 luty 2010, 13:45


@Up
Jedynie drobna poprawka
W przykładzie tej funkcji lepiej zwrócić 0. Co można określić jako, nie ma elementów, nie ma różnicy.


@Up
W przykładzie tej funkcji lepiej zwrócić 0. Co można określić jako, nie ma elementów, nie ma różnicy.

Oczywiście nie zero ale dowolną liczbę ujemną, bo różnica max-min jest zawsze >= 0


Oczywiście nie zero ale dowolną liczbę ujemną, bo różnica max-min jest zawsze >= 0
Owszem. Równanie jest prawdziwe. Ale chodzi mi tutaj o pewne uproszczenie. Skoro równanie max-min=0 spełnione jest tylko dla jednoelementowego zbioru to nic się wielkiego nie stanie gdyby min oraz max zbioru pustego były równe 0. Gdzie w praktyce są zbiorami pustymi. Stąd też i moja wcześniejsza propozycja 0 gdy rozmiar=0. Zwracanie liczb ujemnych z kosmosu nie jest jakimś super wyjściem.


... Skoro równanie max-min=0 spełnione jest tylko dla jednoelementowego zbioru...
Będę polemizował ;-). Należy się domyślać, że skoro tablica jest 20-elementowa, a zainicjowana ma być liczbami z zakresu 0-30, tzn. że istnieje możliwość zainicjowania jej każdego z 20 elementów liczbą dowolna z tego zakresu, zatem również wszystkich taką samą wartością. W tym przypadku max-min zwróci 0 ale zbiór nie będzie jednoelementowy. Chyba, że w zadaniu powiedziane jest, że tablica ma być zainicjowana różnymi elementami z zakresu. Wtedy masz rację.
Jednak ja rozumiem to zadanie jako stworzenie funkcji ogólnej, działającej prawidłowo dla każdej tablicy, a przekazanie jej tablicy 20-elementowej jest tylko formą sprawdzenia działania funkcji.


Będę polemizował ;-). Należy się domyślać, że skoro tablica jest 20-elementowa, a zainicjowana ma być liczbami z zakresu 0-30, tzn. że istnieje możliwość zainicjowania jej każdego z 20 elementów liczbą dowolna z tego zakresu, zatem również wszystkich taką samą wartością. W tym przypadku max-min zwróci 0 ale zbiór nie będzie jednoelementowy. Chyba, że w zadaniu powiedziane jest, że tablica ma być zainicjowana różnymi elementami z zakresu. Wtedy masz rację.
Jednak ja rozumiem to zadanie jako stworzenie funkcji ogólnej, działającej prawidłowo dla każdej tablicy, a przekazanie jej tablicy 20-elementowej jest tylko formą sprawdzenia działania funkcji.

Ok tutaj, masz rację. Założyłem od samego początku używanie generatora liczb pseudolosowych i taki scenariusz w ogóle nie przyszedł mi do głowy. Co i tak na dłuższą metę nie zmienia mojego postulatu z zerem :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •