• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablica liczb bez powtórzeń

VPS Starter Arubacloud
0 głosów
688 wizyt
pytanie zadane 14 kwietnia 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

Moim zadaniem jest stworzenie programu który przepisze tablicę podaną na wejściu bez powtórzeń. 

#include <stdio.h>

int main()
{
    int tab[102] = {0};
    int tab2[1000] = {0};
    int tab3[1000] = {0};
    int zmienna = 0;
    int j = 0;
    int liczba = 0;
    int cyfra = 0;
    int w = 0;
    int x = 0;
    printf("Podaj liczby: ");
    for(int i = 0; i < 1001; i++)
    {   
        if(scanf("%d", &tab[i]) != 1)
        {
            printf("Incorrect input");
            return 1;
        }
        if(tab[i] == 0)
        {
            break;
        }
        zmienna++;
    }
    if(zmienna <= 1)
    {
        printf("Not enough data available");
        return 2;
    }
    for(int i = 0; i < zmienna; i++)
    {
        for(int j = 0; j < zmienna; j++)
        {
            if(tab[i] == tab[j] && i != j)
            {
                tab2[w] = tab[i];
                w++;
            }
            
        }
    }
    for(int i = 0; i < zmienna; i++)
    {
        for(int j = 0; j < zmienna; j++)
        {
            if(tab[i] != tab2[j])
            {
                tab3[x] = tab[i];
                x++;
                break;
            }
        }
    }
    for(int j = 0; j < 1000; j++)
    {
        if(tab3[j] == 0)
        {
            break;
        }
        printf("%d ", tab3[j]);
        
    }
    
    return 0;
}

 

komentarz 14 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

i < 1001

Nie, jeśli tablice są 1000-elementowe to i nie może osiągnąć wartości 1000

komentarz 14 kwietnia 2020 przez mokrowski Mędrzec (155,460 p.)

@ResCrove,
 a czy o tych liczbach coś jeszcze wiadomo? Np. z jakiego są zakresu, czy to pełen zakres int? No i patrz niżej... co oznacza "przepisać tablicę"? Rozumiem że należy zachować kolejność liczb?

1 odpowiedź

0 głosów
odpowiedź 14 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)

1. Wczytaj od użytkownika długość tablicy/ilość liczb

2. Utwórz tablicę o podanym rozmiarze

3. Ustaw zmienną indeks=0

4. Napisz funkcję int dodajLiczbe(int *tablica, int indeks, int liczba) która będzie iterować po tablicy od 0 do indeks-1. Jeżeli znajdzie gdzieś podaną liczbę to zwróci błąd. Jeżeli w przeszukanym kawałku nie ma liczby to dopisze ją na miejscu indeks i zwróć sukces.

5. Po wczytaniu liczby wywołaj funkcję dodajLiczbe. Jeżeli funkcja zwróci sukces to zwiększ zmienną indeks o 1

6. Po wczytaniu wszystkich liczb zmienna indeks zawiera ilość unikalnych liczb. Wyświetl liczby z zakresu 0 do indeks-1

komentarz 16 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)
Masz jakiś efekt uboczny, W funkcji dodajLiczbe używasz zmiennej index zamiast indeks.

Pokaż cały kod
komentarz 16 kwietnia 2020 przez TOWaD Mądrala (5,700 p.)
To kompilator bo właśnie sprawdziłem online i ok. Tak mi się wydalało ze coś z nim nie tak.
komentarz 16 kwietnia 2020 przez TOWaD Mądrala (5,700 p.)
edycja 16 kwietnia 2020 przez TOWaD

@tangarr,
 

#include <iostream>

bool dodajLiczbe(int tablica[], int index, int liczba) {
  for(int i=0; i<index;i++)
  if(tablica[i]==liczba) return 0;
 return 1;
}

int main(){
    const int sizetabcin=8;
    
    int tablicacin[sizetabcin]={2,5,4,6,4,5,5,4};
    
    int tablicadata [sizetabcin]={2};
    int index=1;

    for (int i =index; i<sizetabcin; i++) 
        if (dodajLiczbe(tablicadata,index,tablicacin[i]))
        tablicadata[index++]=tablicacin[i];
        
    for (const auto &x:tablicadata)std::cout<<x<<'\t';
    return 0;
}

i tu dała poprawnie a próbowałem na kompie  i powtarzało ostatnią cyfrę tyle powtórzeń ile razy występowała, kombinowałem i na wskaźnikach i inne różne cuda i ciągle był ten sam efekt a czasem jeszcze gorszy. Oczywiście na początku był jeszcze cin i jedna pętla, ale zacząłem upraszczać w poszukiwaniu błędu i nadal źle było;

a właśnie jak to (cin) (wczytać dane)
   for(int i=index;index<sizetabcin && (std::cin>>tablicacin[i]);i++)

na stronie https://coliru.stacked-crooked.com/

komentarz 16 kwietnia 2020 przez tangarr Mędrzec (154,780 p.)

Twój kompilator mógł inaczej zainicjalizować tablicę tablicadata (same dwójki lub śmieci które pozostały w tym miejscu pamięci po innych programach)

Błędna jest ostatnia iteracja. Wyświetlasz całą tablicę. Powinieneś tylko uzupełnioną część..

for (int i=0; i<index; i++)
        std::cout<<tablicadata[i]<<'\t';

 

komentarz 16 kwietnia 2020 przez TOWaD Mądrala (5,700 p.)
no ok taką sama pętlę można zrobić z while, ale chodzi mi czy da się na tej stronie coś wczytać, ewentualnie jak, ok już mam nie było tematu

Podobne pytania

0 głosów
2 odpowiedzi 5,741 wizyt
pytanie zadane 14 sierpnia 2016 w Java przez Patryk Rafał Bywalec (2,700 p.)
+1 głos
2 odpowiedzi 1,980 wizyt
+2 głosów
2 odpowiedzi 3,398 wizyt
pytanie zadane 14 lipca 2015 w C i C++ przez Wadim Początkujący (260 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...