[c]Program - proszę o pomoc !

0

Witam,

Mam pewien problem ... nie mogę poradzić sobie z napisaniem pewnego programu,którego treść brzmi tak :

"Napisz program,gdzie użytkownik będzie wprowadzał dowolną ilość liczba całkowitych . Koniec wprowadzania będzie oznaczała liczba 0 (wtedy gdy użytkownik wprowadzi liczbę 0),która nie będzie brana pod uwagę . Kolejne zmienne powinny być umieszczone w zmiennej tablicowej . Program powinien wyprowadzać następujące wyniki :
-największą i najmniejszą liczbę
-średnią arytmetyczną liczb
-uporządkowany ciąg od najmniejszej liczby do największej"

Jastem amatorem tego języka ,dlatego też nie radzę sobie ejszcze z pewnymi zadaniami,stąd też kieruję się do Was z prośbą o pomoc przy napisaniu takowego programu,tym bardziej,że jest to dla mnie bardzo ważne .

JEszcze raz proszę o pomoc .

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

#define MULTUM 123456

int liczby[MULTUM];

int porownaj(const void *, const void *);

int main(void)
{
  long long suma = 0;
  long ilosc = 0;
  int liczba = 0;
  while((scanf("%d%*c", &liczba) == 1) && liczba)
   suma += liczby[ilosc++] = liczba;
  qsort(liczby, ilosc, sizeof(int), porownaj);
  printf("Najmniejsza : %d\nNajwieksza : %d\nSrednia : %f\nPosortowane : \n",
         liczby[0], liczby[ilosc - 1], suma / (double)ilosc);
  for (liczba = 0; liczba < ilosc; liczba ++)
   printf("%d\n", liczby[liczba]);
  getchar();
}

int porownaj(const void *i1, const void *i2)
{
  return *((int *)i1) - *((int *)i2);
}
0

#include <stdlib.h>

#define MULTUM 123456

int liczby[MULTUM];

Czy to aby na pewno są znaczniki języka C,a nie przypadkiem C ++ . Niestety nie miałęm na lekcjach jeszcze tego typu znaczników ,stąd też moje zdziwienie . Można je zastąpić np. "int tablica [100]" ?

Program ma być napisany za pomocą czystego języka C .

Please help again !

0

#include <stdlib.h>

#define MULTUM 123456

int liczby[MULTUM];

Czy to aby na pewno są znaczniki języka C,a nie przypadkiem C ++ .

#define jest to dyrektywa preprocesora i na pewno wystepuje w jezyku c.

Można je zastąpić np. "int tablica [100]" ?

Oczywiscie, ze mozna. Tylko jesli zmienisz rozmiar tablicy, a w programie masz kilka funkcji lub instrukcji, ktore sa zwiazane z tablica (np. wpisywanie, wyswietlanie itp), to bedziesz musial to takze zmienic.

0

Może powiem inaczej ,a mianowicie wymienię to co miałem na lekcjach i z czgego mam zbudować ten program :

Więc tak :

  • #include <stdio.h>
  • int (deklaracja zmiennych)
  • printf
    -scanf

Pętle :

  • do while (mój teacher proponował zastosować ją w tym programie)
  • while
  • for

Przy tych pętlach tylko podstawy podstaw,niestety mój nauczyciel tłumaczy tak,że nikt go nie rozumie,a właściwie to w ogóle nie tłumaczy ;)

  • Instrukcje iteracyjne

  • int tablica[]
    -getcher

  • break

Typy baz danych

  • float
    -void
    -char

Niestety miałem tylko to,czyliu jak widać nie są to nawet podstawy podstaw a przy lekcjach mojego profesora naprawdę jest cokolwiek z tego zrozumie,więc jeszcze raz proszę Was o pomoc przy budowie programu tylko i wyłącznie ze zwrotów podanych wyżej . Bardzo dziękuję .

0

Program napisany jest w bardzo prosty sposob. Mozesz go zoptymalizowac. Polecam przerobic go na funkcje

#include <stdio.h>
#include <conio.h>

int main()
{
int tablica[20],licznik,liczba,i,j,max,min,suma,buf;
float srednia;

clrscr();

licznik=0;

printf("\nWPROWADZANIE DANYCH\n");

do
{
printf("Podaj element nr %d: ",licznik+1);
scanf("%d",&liczba);

if(liczba==0) break;

tablica[licznik]=liczba;

licznik++;

}while(licznik<20);

//szukanie max i min elementu
max=tablica[0];
min=tablica[0];

for(i=0;i<licznik;i++)
{
if(tablica[i]>max)max=tablica[i];
if(tablica[i]<min)min=tablica[i];
}
printf("\nNajwiekszym elementem jest %d", max);
printf("\nNajmniejszym elementem jest %d", min);

//koniec szukania max i min elementu

//srednia arytmetyczna
suma=0;

for(i=0;i<licznik;i++)
suma=suma+tablica[i];

srednia=(float)suma/(float)licznik;

printf("\nSrednia arytmetyczna = %f", srednia);

//koniec sredniej arytmetycznej

//sortowanie
for(i=1;i<licznik;i++)
for(j=0;j<=i;j++)
{
if(tablica[i]<tablica[j])
{
buf=tablica[i];
tablica[i]=tablica[j];
tablica[j]=buf;
}
}
//koniec sortowania

printf("\n\nPOSORTOWANE ELEMENTY TABLICY\n");
for(i=0;i<licznik;i++) printf("%d, ",tablica[i]);

getchar();
getchar();
}

0

Kurcze ... nadal to nie jest to ,ale jest już bliżej tego co szukam . A teraz mankamenty :

nie mieliśmy czegoś takiego jak

clrscr();

czy też

#include <conio.h>

Więc tego zawartego w pracy po prostu być nie może .

0

nie mieliśmy czegoś takiego jak

clrscr();

czy też

#include <conio.h>

Jesli usuniesz #include <conio.h> oraz clrscr() to stracisz tylko tyle, ze ekran nie bedzie czyszczony. Poza tym nie wplynie to na dzialanie programu.

0

Nie za bardzo rozumiem ten zapis

{
if(tablica[i]<tablica[j])
{
buf=tablica[i];
tablica[i]=tablica[j];
tablica[j]=buf;
}

Ponadto,czy nie można ograniczyć jakoś tego ogromu zmiennych ?

int tablica[20],licznik,liczba,i,j,max,min,suma,buf;

Łatwo się pogubić :

Aha i jeszcze jedna sprawa :

Z tego co pamiętam wprowadzenie liczb miało być pojedyńcze a nie masowe :

printf("\nWPROWADZANIE DANYCH\n");

Co to jest "buf" i tablica [i],tablica [j] ?

0

if(tablica[i]<tablica[j])
{
buf=tablica[i];
tablica[i]=tablica[j];
tablica[j]=buf;

Jest to fragment sortowania przez proste wstawianie. Wiecej na stronie
http://gege01.w.interia.pl/pomoce.html/algorytmy_i_struktury_danych_sem_3/spr_3.pdf

Ponadto,czy nie można ograniczyć jakoś tego ogromu zmiennych ?

Oczywiscie, że tak.

Z tego co pamiętam wprowadzenie liczb miało być pojedyńcze a nie masowe

A jakie jest?

Co to jest "buf" i tablica [i],tablica [j] ?

buf to zmienna pomocnicza (moze byc inna, np.mietek)
tablica[i] i tablica[j] to ta sama tablica - ptrzebne przy sortowaniu

0

Oczywiście,że tak

W takim razie,w jaki sposób ?

Zamiast int licznik,można zastąpić l ,a przy jakimś działaniu ,które tam zauważyłem l+1 zastąpić l++ .</quote>

0

To wszystko juz zalezy od Twojej wyobrazni.
Np. zamiast zmiennej max i sum mozesz stworzyc zmienna x.

Ja zastosowalem tak duzo zmiennych, by program byl bardziej przejrzysty.

0

Oki w takim razie baaaaaaardzo dziękuję,zobaczymy jak to jutro wyjdzie w praktyce :P Dzięki jeszcze raz ;)

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