raven_ns Opublikowano 13 Grudnia 2005 Zgłoś Opublikowano 13 Grudnia 2005 Witam postanowilem napisac kolejny programik jako ze C jest bardzo wciagajacym to od razu zabralem sie do roboty. Program powinien prosic uzytkownika o kolejne liczby do tablicy i w razie gdy wpiszemy 0 to powinien pominac 0 i policzyc sume srednia max i min wszystkich liczb wpisanych to dablicy ale bez owego zera. Wszystko dziala do 14el po wpisaniu 14 el program sie wiesza.Moze moglibyscie mi w tym pomoc bo chyba zamarlem w martwym punkcie. Tresc zadanka Napisać program wczytujący do tablicy n-elementowej n liczb ( 0 < n <=20 ) rzeczywistych. Program ma wypisać sumę, średnią arytmetyczną wczytanych liczb oraz liczby największą, najmniejszą i ile razy każda z nich wystąpiła.Nieograniczony żadną tablicą (mogący przetwarzać ciągi liczb dowolnej długości). Dla uproszczenia przyjmiemy, że program zakończy wczytywanie liczb i wypisze wyniki po wprowadzeniu wartości 0. #include <stdio.h>#include <stdlib.h>/*Proram sluzacy do wyliczenia sumy , sredniej , min i max dla ciagu n-el*/int main(){ int i,x, s, srd, min, max, lmax, lmin, k, ilo; /*deklaracja zmiennych*/ float tab[i]; ilo=-1; i=0; s=0; k=1; printf("Proram sluzacy do wyliczenia sumy , sredniej , min i max dla ciagu n-el\n\n"); printf("Program zakonczy wpisywanie liczb jezeli jako kolejna liczbe podasz mu\nwartosc neutralna 0\n\n\n"); do { printf("Podaj %d element tablicy\n",i+1); //tutaj robimy myk techniczny;), zmienna ilo liczy przebieg petli scanf("%f", &tab[i]); k=tab[i]; i++; ilo++; } while ( k != 0); //tutaj waruneczek na zatrzymanie petelki a mianowicie jezeli do tablicy wpiszemy 0 to petla sie konczy printf("--------------------------\n\n"); i=0; /*Suma Ciagu*/ do { s = s + tab[i]; i++; } while(i<ilo); printf("Suma wynosi %d\n\n",s); /*Srednia Ciagu*/ srd = s/ilo; printf("Srednia wynosi %d\n\n",srd); /*Minimum i maximum*/ i=0; max=tab[i]; min=tab[i]; i++; while (i<ilo) { if (tab[i] > max) { max = tab[i]; } if ( tab[i] < min) { min = tab[i]; } i++; } printf("Maximum w ciagu wynosi %d a minimum %d\n\n",max,min); i=0; lmax = 0; lmin = 0; while (i<ilo) { if (max == tab[i]) { lmax = lmax + 1; } if (min == tab[i]) { lmin = lmin + 1; } i++; } printf("Maximum wystepuje w ciagu %d razy a minimum %d razy\n\n",lmax , lmin); system("PAUSE"); return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kobe2005 Opublikowano 14 Grudnia 2005 Zgłoś Opublikowano 14 Grudnia 2005 albo ja jestem jakis nie zabardzo ale od kiedy to mozna zadeklarowac tablice bez okreslonej liczby lementow w ten sposob float tab. C dziala w ten sposob, ze najpierw rezerwuje pamiec, dlatego nie da rady od tak zdefiniowac sobie tablic o dowlnej liczbie elementow. Jesli rozmiar tablicy nie jest znany to musisz posluzyc sie lista jedno lub dwukierunkowa tak np. Jakiego kompilatora uzywasz bo moj borland to odrazu mowi, ze Constant expression required - czyli musi byc stala wartosc podczas deklaracji. Twoj kompilator kompiluje taki program bez bledu? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
raven_ns Opublikowano 14 Grudnia 2005 Zgłoś Opublikowano 14 Grudnia 2005 tak juz wiem doszedlem do tego ,ze nalezy zdeklarowac tam jakas liczbe pozycji w tablicy , uzywam Deva wersja powyzej 4 i zadnego bledu mi nie pokazuje kompiluje go bez problemu. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
liechmaster Opublikowano 14 Grudnia 2005 Zgłoś Opublikowano 14 Grudnia 2005 (edytowane) taka user frendly uwaga ;) nie wiem jak długo programujesz i jakie masz przyzywczajenia/ umiejętności ale w takich językach jak C/C++ ( dotyczy to jednak chyba wszystkich języków) gdzie kompilator traktuje programistę za tego, który wie co robi ( nie jest tak restrykcyjny jak np w pascalu) to polecam inizjalizację wszystkich zmiennych w momencie ich deklarowania, można dzięki temu uniknąć wielu problemów. inna sprawa.. odnośnie tego że kompliator to puścił, o ile mi wiadomo to dev cpp uzywa jako kompilatora gcc a ten jest nieco zmodyfikowany, inna sprawa że w c++ ( a więc chyba i w c) tablica jest czymś abstarakcyjnym, tak na prawdę nie ma tablic , tylko jest wskaźnik do elementu. to oznacza liczę przesunięć wskaźnika. - z dużym p-stwem to miało właśnie wpływ na kompliację i wystąpienie błędu. ps ten program to taki mix c/c++ w czystym c nie wystepuje komentarz jednej linni - // wprowadzono go dopiero w c++;) ale to taka mała dygresja Edytowane 14 Grudnia 2005 przez liechmaster Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...