Wyszukiwanie i zliczanie par takich samych liczb z tablicy

2015-01-12 18:56
0

Witam

Napisałem program, banalny, który robi różne rzeczy z tablicą. Jednak mam problem ze zliczaniem par takich samych liczb.
Z tego co wiem to program bierze po kolei każdą wartość z tablicy i porównuje ją do kolejnej czyt.
mamy A B C D E
A czy = B? A czy = C? A czy = D? A czy = E?
B czy = C? B czy = D? B czy = E?
C czy = D? C czy = E?
D czy = E?

Przy np
2 2 2 3 3
zliczy mi, 4 pary wg mojego algorytmu, a tak nie jest :/

niby można podzielić przez 2 na szybko patrząc ale to też nie działa :P

możecie pomóc jak rozwiązać ten problem? ostatni komentarz na dole programu za to odpowiada...

z góry dzięki za pomoc.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 20

int main()
{
    int tab[N],i,K,k,min,max,parz=0,nparz=0,para,a,wynik;

    do
    {
    printf("Ile liczb chcesz wprowadzic??\n");
    scanf("%d",&K);
        if(N<K)
        {
            printf("Za mala tablica! Podaj mniej liczb!\n\n");
        }
    }
    while(N<K);

    for(i=0; i<K; i++)
    {
        printf("Podaj dana do tablicy:   ");
        scanf("%d",&tab[i]);
    }

    printf("\n\nWprowadzone wartosci: \n\n");

    for(i=0; i<K; i++)
    {
        printf("%d   ",tab[i]);
    }

// wartosci min i max
    min=tab[0];
    max=tab[0];

    for (i=0; i<K; i++)
    {
        if (tab[i]>max)
        {
        max=tab[i];
        }
        if (tab[i]<min)
        {
        min=tab[i];
        }
    }

    printf("\n\nWartosc max:   %d",max);
    printf("\n\nWartosc min:   %d",min);

// wartosci parzyste i nieparzyste
    printf("\n\nWartosc parzyste:   ");
    for (i=0; i<K; i++)
    {
        if (tab[i]%2==0)
        {
            parz++;
            printf("%d  ",tab[i]);
        }
    }
    printf("  -- ilosc wartosci parzystych:  %d",parz);

    printf("\n\nWartosc nieparzyste:   ");
    for (i=0; i<K; i++)
    {
        if (tab[i]%2!=0)
        {
            nparz++;
            printf("%d  ",tab[i]);
        }
    }
    printf("  -- ilosc wartosci nieparzystych:  %d",nparz);

// liczby parzyste z zakresu
    printf("\n\n\nLiczby parzyste z zakresu <10 i >300 to:   ");
    for (i=0; i<K; i++)
    {
        if (tab[i]>10 && tab[i]<300)
            {
                if (tab[i]%2==0)
                {
                    printf("%d  ",tab[i]);
                }
            }
    }

// para liczb ...... problem ze zliczaniem i wyswietlaniem par liczb!

    para=0;
    k=0;
    wynik=0;
    for (i=0; i<K-1; i++)
    {
        for (k=i+1; k<K; k++)
            {
                if(tab[i]=tab[k])
                    {
                        para++;

                    }
            }

    }
    para=para/2;
    printf("\n\nTakich samych par liczb jest:   %d",para);

    printf("\n\n");

    return 0;
}

Pozostało 580 znaków

2015-01-12 18:59
1
if (tab[i] == tab[k])

Pozostało 580 znaków

2015-01-12 19:04
0
  1. Nie używaj i++ tam gdzie można użyć ++i - ten brzydki nawyk się zemści.
  2. for(i=0;i<K;++i) for(k=i+1;k<K;++k) if(tab[i]==tab[k]) { ++para; break; }
    //para=para/2;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon, 2015-01-12 19:06

Pozostało 580 znaków

2015-01-12 19:08
0

Dopiero zaczynam coś ogarniać. Gdzie znajdę informacje czemu używać ++i zamiast odwrotnie?

edytowany 1x, ostatnio: zejnowski, 2015-01-12 19:08

Pozostało 580 znaków

2015-01-12 19:24
17

Ni należy używać i++ tam gdzie można użyć ++i ponieważ:

  1. i++ tworzy tymczasową kopie starej wartości. Jeżeli kompilator nie ma optymizacji lub jest wyłączona to może to powodujesz niepotrzebne zwiększenie czasu działania programu owszem małe. P przeciwnym przypadku powodujesz niepotrzebne zwiększenie czasu kompilacji znowu małe.
  2. Dopiero jak przejdzie ci zastąpić to iteratorem lub większą liczbą lub obiektem np streampos http://www.cplusplus.com/reference/istream/istream/tellg/ wtedy kompilator nawet nie ma prawa nic optymalizować i będziesz mieć bezsensowne "wycieki czasu".
  3. Dla mądrali z argumentami typu: - "Każdy współczesny kompilator ma optymalizacje" - Każda współczesna firma zatrudnia sprzątaczkę, ale to nie jest powodem stawiania kloców pośrodku korytarza.
  4. Lepiej wyrobić sobie nawyk używania ++foo, a postinkrementacji tylko wtedy gdy jest faktycznie używana niż odwrotnie. Dla nowicjusza jedno i drugie to czarna magia, więc po co uczyć go (potencjalnie) źle? - @kq

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-19 00:14
o i się doczekałem :D bo znaleźć nie mogłem - stryku 2015-01-12 20:15
Popieram! - Silv 2015-12-12 23:29
"Niektórzy nie myją rąk po wyjściu z toalety. Niby więcej bakterii masz na klawiaturze niż na sedesie, ale jednak niesmak pewien jest..." Programik w C++ (Zrobienie piramidy) - kq 2016-01-29 18:30

Pozostało 580 znaków

2015-01-12 21:57
0

dzięki.

Program niestety nadal ma problem.... wystarczy podać np kilka takich samych liczb:
dla tablicy: 7 7 7 3 7 7 10 10 234 234 podał, że takich samych par liczb jest 12? :-)

Pozostało 580 znaków

2015-01-12 23:11
0

Odpowiedz na cztery pytania:

  1. 9 9 9
  2. 9 9 9 9
  3. 9 9 9 9 9
  4. 9 9 9 9 9 9
    to może będę w stanie ci pomóc,

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon, 2015-01-12 23:12

Pozostało 580 znaków

2015-01-12 23:22
0

3
6
10
15

Pozostało 580 znaków

2015-01-12 23:25
0

No to:

para=0;
for(i=0;i<K;++i) for(k=i+1;k<K;++k) para+=(tab[i]==tab[k]);

http://ideone.com/RpfF3l


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-12 23:50

Pozostało 580 znaków

2015-01-13 20:52
0

Mogę jakoś program tutaj zamieścić, nadal nic :-) wystarczy podać więcej niż dwie te same liczby w różnych miejscach :-)

Pozostało 580 znaków

2015-01-13 20:57
0

Wg mnie działa: http://ideone.com/a1kIMd
Podaj przykład dla którego ci się nie zgadza.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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