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

C++ tablice zliczanie elementow

Object Storage Arubacloud
0 głosów
1,842 wizyt
pytanie zadane 9 kwietnia 2018 w C i C++ przez four Użytkownik (720 p.)

Mam napisać program, który zliczy ile razy jedna tablica występuje w drugiej, zliczane elementy tablicy mogą się nakładać. Napisałem coś takiego, ale nie do końca działa, po dokładnym przeanalizowaniu nadal nie widzę błędu

#include<iostream>
using namespace std;
int main()
{
	int p, q;
	int tab1[p];
	cout<<"Podaj liczbe elementow pierwszej tablicy: ";
	cin>>p;	
	for(int i=0; i<p; i++)
	{
		cout<<"Podaj element nr: "<<i+1<<" tablicy:";
		cin>>tab1[i];
	}
	int tab2[q];
	cout<<"Podaj liczbe elementow drugiej tablicy: ";
	cin>>q;
	

		for(int i=0; i<q; i++)
	{
		cout<<"Podaj element nr: "<<i+1<<" tablicy:";
		cin>>tab2[i];
	}
	
	
	int counter=0, zliczanie=0;
	int x= 0, y=0;
	for(int i=0; i<q; i++)
	{
		if(tab1[x]==tab2[y])
		{
			
			x++;
			y++;
			counter++;
			if(counter==3)
				{
				counter=0;	
				zliczanie++;
				x=0;	
				}
		}
		else
		{
			x=0;
			y++;
			counter=0;
		}
		
	}
	cout<<"Liczba powtorzen: "<<zliczanie;
	return 0;
}

 

2
komentarz 9 kwietnia 2018 przez mokrowski Mędrzec (155,460 p.)
Kod jest błędny bo używa VLA czyli tablic o wielkości deklarowanej w zmiennej. Ta właściwość niestety jest dodatkowo obsługiwana w kompilatorze a nie jest częścią standardu C++.

Dodatkowo nie bardzo rozumiem jak tablice mają się w sobie zawierać. Możesz pokazać jakiś przykład?

2 odpowiedzi

0 głosów
odpowiedź 9 kwietnia 2018 przez four Użytkownik (720 p.)
np dla int tab1 ={1,0,1} i tab2={1,0,1,0,1,1} program ma wyświetlić 2
komentarz 9 kwietnia 2018 przez mokrowski Mędrzec (155,460 p.)
Ok, w takim razie wyszukiwanie implementuj algorytmem KMP https://pl.wikipedia.org/wiki/Algorytm_Knutha-Morrisa-Pratta
komentarz 9 kwietnia 2018 przez four Użytkownik (720 p.)
edycja 9 kwietnia 2018 przez four

@four,
czyli tym sposobem, którym zrobiłem nie da się tego rozwiązać??

Bo nie za bardzo rozumiem jak tutaj wprowadzić ten algorytm

0 głosów
odpowiedź 9 kwietnia 2018 przez mokrowski Mędrzec (155,460 p.)

Możesz to zrobić tak jak napisałeś ale:

1. Będzie to rozwiązanie nieefektywne.

2. Tworząc tablice kupujesz wiele problemów z dealokacją pamięci i ręcznym jej zarządzaniem.

3. Powstanie kod kruchy i podatny na wprowadzenie błędów.

Lepiej użyć std::vector który rozwiązuje te problemy i algorytmu KMP który efektywnie szuka wzorca. Ale pewnie "kazali zrobić tak jak kazal". No to trochę lepiej będzie tak... 

#include <iostream>
#include <cstddef>

int main() {
    std::size_t tablica1_ilosc;
    std::cout << "Podaj ilość elementów 1 tablicy: ";
    std::cin >> tablica1_ilosc;
    // TODO: Kontrola wprowadzonych danych.. 
    int * tablica1 = new int[tablica1_ilosc];

    for(std::size_t i = 0; i < tablica1_ilosc; ++i) {
        std::cout << "Podaj element nr "
            << (i + 1) << " tablicy: ";
        std::cin >> tablica1[i];
        // TODO: Kontrola wprowadzonych danych..
    }
    
    // To samo dla tablicy 2...

    // Obowiązkowe!
    delete [] tablica1;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 2,320 wizyt
0 głosów
3 odpowiedzi 203 wizyt
+1 głos
2 odpowiedzi 641 wizyt
pytanie zadane 16 stycznia 2022 w C i C++ przez Dynamic Bywalec (2,910 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...