c++ porównywanie tablic

0

Hej wpisze program oto co mam zrobić:

  1. Do 10 elementowej tablicy LOSUJEMY liczby w zakresie 1-100
  2. Do 20 elementowej tablicy WPISUJEMY liczby w zakresie 1-100 z klawiatury (Należy zabezpieczyć zakres za pomocą pętli while)
  3. Wyświetlić losowane liczby po uprzednim posortowania tablicy
  4. Sprawdzić ile z wpisanych do tablicy wartościowości trafiło się w tablicy wylosowanej

Nie mogę zrobić 4 podpunktu. Program działa lecz zamiast wyświetlić ile razy liczba występuje w drugiej tablicy, program wyświetla że 0 a to nie prawda kombinuje na każdy sposób lecz nie mogę dojść do rozwiązania naprowadzi mnie ktoś co jest źle? Oto program:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
using namespace std;

int wylosowane[100];
int losowana=0;
int wi[20];
int tab_odp[100];

void sortowanie_babelkowe(int *tab, int n)
{
    for (int i=1; i<n; i++)
    {
        for (int j=n-1; j>=1; j--)
        {
            if (tab[j]<tab[j-1])
            {
                int bufor;
                bufor=tab[j-1];
                tab[j-1]=tab[j];
                tab[j]=bufor;
            }
        }
    }
}

int main()

{
    srand(time(NULL));
    HANDLE hOut;
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    cout<<"losowanie liczb nacisnij enter:"<<endl ;

    getchar();
    for(int i=0; i<100; i++)

    {
        losowana++;
        wylosowane[i] = rand()%100+1;

    }

    cout<<"podaj 20 liczb z zakresu 1-100"<<endl;
    for (int i=1; i<21; i++)

    {
        cout<<"Podaj "<<i<<" element tablicy: ";
        cin>>wi[i];




        if(wi[i]<=0||wi[i]>=101)

            cout<<"Podana liczba jest spozas zakresu zacznij od nowa!"<<endl;
        while(wi[i]<=0||wi[i]>=101);

    }

    cout<<"Sortowanie elementow:"<<endl;
    sortowanie_babelkowe(wylosowane, 100);
 sortowanie_babelkowe(wi, 20);

     cout<<"Liczby posorotwane nacisnij enter:"<<endl ;
    getchar();

    cout<<"Wylosowane liczby:"<<endl;
    for(int i=0; i<100; i++)
        cout<<wylosowane[i]<<endl;
    cout<<"Liczy wystepujace w wylosowanych nasisnij enter aby zobaczyc:"<<endl;

    getchar();

  for (int i = 0; i<100; i++) tab_odp[i] ;

    for (int i = 0; i<100; i++)
    {
        for (int i = 0; i<20; i++)
        {
            if (wylosowane[i] == wi[i])
            {
                tab_odp[i]+= 1 ;
            }
        }
    }

    for (int i = 0; i<100; i++) cout << "Cyfra " << wylosowane[i] << " wystepuje w wpisanych "<< tab_odp[i] << " razy" << endl;



    system("PAUSE");
    return 0;
}
2
Damian Grzankowski napisał(a):

....
4. Sprawdzić ile z wpisanych do tablicy wartościowości trafiło się w tablicy wylosowanej

A cym są te wartościowości i z czym to się je?
Co wg ciebie robi ten wiersz: ```for (int i = 0; i<100; i++) tab_odp[i] ;`` ?

Czy kompilator nie protestuje przeciwko takiemu nonsensu?

for (int i = 0; i<100; i++)
{
    for (int i = 0; i<20; i++)

To jak w kawale:

Pacjent skarży się na bóle głowy oraz dupy.
Lekarz wyciąga tabletkę lamie ją na pół i mówi: - Ta połówka jest od głowy, a ta od dupy, proszę nie pomylić.

To która i od której tablicy? I jak wg ciebie kompilator ma je odróżnić?

3

W informatyce indeksy używa się od zera nie od 1!
Przez to jedną pętlę masz źle. https://godbolt.org/z/vMTbGGsoc

To jest potencjalnie nieskończona pętla: while (wi[i] <= 0 || wi[i] >= 101)

0

@Damian Grzankowski: Chyba zapomniałeś, że i i j to nie to samo, po poprawce przynajmniej coś zlicza:

    for (int i = 0; i<100; i++) 
    {
        for (int j = 0; j < 20; ++j)
        {
            if (wylosowane[i] == wi[j])
            {
               tab_odp[i] += 1 ;
            }
        }
    }

    for (int i = 0; i<100; i++)
    {
         cout << "Cyfra " << wylosowane[i] << " wystepuje w wpisanych "<< tab_odp[i] << " razy" << endl;
    }

EDYCJA: Jak zwrócono uwagę powyżej, czemu indeksujesz od jednego? W sortowaniu, linia 16, indeks indzie od 1 do 19, stestowałeś dokładnie tę funkcję, działa poprawnie?

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