Dodawanie/usuwanie elementów w kolejce.

0

Jestem bardzo początkująca - tak żebyście wiedzieli z kim macie do czynienia :P

Program działa niemalże idealnie tak jak powinno wykluczając to, że nie wiem za bardzo w którym momencie powinnam odejmować w tablicy, by wpisywało mi odpowiednią liczbę w odpowiednie miejsce. Proszę o pomoc! ;)

#include "stdio.h"
#include <iostream>
using namespace std;

int tail[8], head[8], lenght[8];

int Enq (int q, int x)
{
	tail[q]=head[q]=0;
	tail[q]=x;
	if ( tail[q]==lenght[q]) tail[q]=1;
	else tail[q]=tail[q]+1;
	return 0;
}
int Deq (int q)
{
	int x=head[q];
	tail[q]=head[q]=0;
	if (head[q]==lenght[q]) head[q]=1;
	else head[q]=head[q]+1;

	return x;

}

int main()
{
	int a,b,c;

	while(tail[8]!=true)
	{
	cout << "Wprowadz odpowiednio:\n1 - jesli chcesz dodac element do kolejki\n2 - jesli chcesz go usunac. \n"<<endl;
	cin >>a;

	
		switch (a)
		{
		case 1:
			cout << "Wybrales dodawanie. Wprowadz teraz nr miejsca kolejki (<8) i cyfre jaka chcesz wprowadzic:\n" << endl;
			cin >> b;
			cin >> c;
			Enq(b,c);
			for(int i=0; i<8; i++)
			{
				cout << tail[i]; 
			}
			cout<<endl;
			break;
		case 2:
			cout << "Wybrales odejmowanie. Wprowadz numer miejsca w kolejce, ktory chcesz wyczyscic.\n"<< endl;
			cin >> b;
			Deq(b);
			for(int i=0; i<8; i++)
			{
				cout << tail[i]; 
			}
			break;
		default:
			cout << "Blad instrukcji! Wpisz ponownie odpowiedni numer\n";
			break;

		}
		cout << endl;
	}
	return 0;
}
0

Nie mam za bardzo czasu, ale to, co od razu mi się rzuciło w oczy:

  • jeśli #include <iostream> to nie #include "stdio.h" (piszesz w C czy C++? -.-)
  • zgrozo, globalne tablice - a nie lepiej użyć wskaźników
  • jeśli \n to już nie endl
  • napisałaś tyle, a nie potrafisz wypisać odpowiedniej zmiennej na stdout?:>

I dlaczego ta kolejka ma ograniczoną ilość elementów? Takie wg Ciebie są kolejki?

0
#include <iostream>
using namespace std;

int tablica[8];
int *tail=tablica;
int *head=tablica;
int *lenght=tablica+7;



int Enq (int x)
{
*tail=x;
if ( tail==lenght) tail=tablica;
else tail=tail+1;
return 0;  //jak nie chcesz aby nic zwracala mozesz zawsze zrobic j1 typem void
}
int Deq ()
{
int x=*head;
if (head==lenght) head=tablica;
else head=head+1;
return x;
}

void wypisz()
{
   if (head==tail) cout<<"tablica pusta"<<endl;
   else
   {
       cout<<"kolejka"<<endl;
       for(int* wskaznikpomocniczy=head;wskaznikpomocniczy!=tail;wskaznikpomocniczy++)
       {
                   if(wskaznikpomocniczy==lenght)
                   {
                       wskaznikpomocniczy=tablica;
                   }
                   else
                   {
                       cout<<*wskaznikpomocniczy;
                   }
       }
   }
   cout<<endl;
}

int main()
{
int a,b;

while(tail[8]!=true)
{
cout << "Wprowadz odpowiednio:\n1 - jesli chcesz dodac element do kolejki\n2 - jesli chcesz go usunac. \n"<<endl;
cin >>a;


 switch (a)
 {
 case 1:
  cout << "Wybrales dodawanie. Wprowadz teraz cyfre jaka chcesz wprowadzic:\n" << endl;
  cin >> b;
  Enq(b);
  wypisz();
  cout<<endl;
  break;
 case 2:
  cout << "Wybrales odejmowanie"<< endl;
  cout<<Deq();
  wypisz();
  break;
 default:
  cout << "Blad instrukcji! Wpisz ponownie odpowiedni numer\n";
  break;

 }
 cout << endl;
}
return 0;
}

To jest już poprawiony kod. Zrobiony na wskaźnikach. Niestety dalej nie działa mi przepełnienie.
Piszę w c++ i już wiem, że nie mogę mieć jednocześnie <stdio.h> i <iostream>, bo wzajemnie one się wykluczają, a w sumie to w c++ nie <stdio.h> tylko <cstdio>.
Ograniczona ilość elementów kolejki spowodowana jest tym, że akurat takie mieliśmy polecenie na lekcji.

Mimo wszystko - dzięki za uwagi! ;)

0

Piszę w c++ i już wiem, że nie mogę mieć jednocześnie <stdio.h> i <iostream>, bo wzajemnie one się wykluczają, a w sumie to w c++ nie <stdio.h> tylko <cstdio>.

Można mieć jednocześnie <cstdio> i <iostream>.

I nic się nie wyklucza.
Mieszanie nagłówków „starych” (stdio.h) z „nowymi” (cstdio, iostream) jest niezalecane, bo robisz sobie bałagan — część funkcji trafia do przestrzeni std:: a część nie – i nawet nie wiadomo które gdzie.

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