witam, jestem w totalnej kropce, wywala mi ciągle że program przestał dzialać i windows szuka błędów.
wszystkie funkcje operujące na liscie są zabezpieczone przed wyjściem poza nią, wiec totalnie nie wiem dlaczego program nie chce dzialać. Kompilator nie wyrzuca żadnych błędów. dodam że jestem początkującym programistą wszelkie wskazówki mile widziane
dodaje kod w pliku txt
//a ja wrzucam ten plik do posta // drobok
#include
#include
#include <conio.h>
#include
#include <windows.h>
using namespace std;/*W ramach zadania p2 do programu p1 prosze stworzyc i wykonac nastepujace funkcje:
Tworzenie listy w funkcji
Wyznaczyc i wypisac srednie wartosci liczba_1, liczba_2 oraz róznicy pomiedzy tymi wartosciami.
Na poczatku listy dodac rekord o srednich wartosciach.Funkcje usuwajaca z listy rekordy, w których wartosc bezwzgledna róznicy pomiedzy liczba_1 i liczba_2
jest wieksza od sredniej róznicy. Dodac na koncu listy rekord z nowymi srednimi wartosciami liczba_1 i liczba_2.////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Przy usuwaniu elementów o wartosci bezwzglednej róznicy wiekszej niz srednia wartosc róznicy mam wrazenie,
ze sa usuwane nie te rekordy, co trzeba. Dodatkowo jest zly warunek – powinna byc wartosc bezwzgledna róznicy,
a nie poszczególnych elementów.
Na koncu listy nie zapisuje Pan nowych wartosci srednich.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
*/struct SElement
{
int liczba1,liczba2;
SElement *nast;
};int srednia_roznica;
SElement *glowa, *aktualny, *ogon;
int templiczba1, templiczba2, ile;void dodaj(int x,int y)
{aktualny = new SElement;
aktualny->liczba1 =x;
aktualny->liczba2 =y;
aktualny->nast = glowa->nast;
glowa->nast = aktualny;
};void lista()
{
int licz1=1,licz2=0;licz1=1+rand()% 100; licz2=1+rand()% 100; templiczba1 =licz1; templiczba2=licz2;
glowa = new SElement;
glowa->liczba1=licz1;
glowa->liczba2=licz2;
glowa->nast = NULL;
ogon = glowa;ile=1;
if(licz1!=licz2)
{
do
{
ile++;licz1=1+rand()% 100; licz2=1+rand()% 100; templiczba1+=licz1; templiczba2+=licz2; aktualny = new SElement; aktualny->liczba1=licz1; aktualny->liczba2=licz2; aktualny->nast = NULL; ogon->nast = aktualny; ogon = aktualny;
}
while(licz1!=licz2);};
int sr1=templiczba1/ile;
int sr2=templiczba2/ile;
cout<<endl<<endl<<"srednia wartosc x = "<<sr1<<endl;
cout<<endl<<endl<<"srednia wartosc y = "<<sr2<<endl<<endl;
cout<<endl<<endl<<"roznica miedzy nimi = "<<sr1-sr2<<endl<<endl;aktualny = new SElement;
aktualny->liczba1 =sr1;
aktualny->liczba2 =sr2;
aktualny->nast = glowa;
glowa= aktualny;srednia_roznica = sr1-sr2;
}
void pisz(SElement *adres)
{
if (!adres)
return;
cout << adres->liczba1 <<","<liczba2<< endl;
pisz(adres->nast);
};////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*Funkcje usuwajaca z listy rekordy, w których wartosc bezwzgledna róznicy pomiedzy liczba_1 i liczba_2
jest wieksza od sredniej róznicy. Dodac na koncu listy rekord z nowymi srednimi wartosciami liczba_1 i liczba_2.Przy usuwaniu elementów o wartosci bezwzglednej róznicy wiekszej niz srednia wartosc róznicy mam wrazenie,
ze sa usuwane nie te rekordy, co trzeba. Dodatkowo jest zly warunek – powinna byc wartosc bezwzgledna róznicy,
a nie poszczególnych elementów.
Na koncu listy nie zapisuje Pan nowych wartosci srednich./
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int srx(SElementadres)
{
int ile=0,licz1=0;
while(adres!=NULL)
{
ile++;
licz1+=adres->liczba1;
adres=adres->nast;} int x=licz1/ile;
return x;
}int sry(SElement*adres)
{
int ile=0,licz1=0;
while(adres!=NULL)
{
ile++;
licz1+=adres->liczba2;
adres=adres->nast;} int x=licz1/ile;
return x;
}const int bezwgl_roz=abs(srx(glowa)-sry(glowa));
int sr_roz(SElement*adres)
{
int srednia=0,ile=0;
while(adres!=NULL)
{
ile++;
srednia+=adres->liczba1 - adres->liczba2;adres=adres->nast; } return srednia/ile;
}
const int SREDNIA_ROZNICA=sr_roz(glowa);
void usun(int ktory_nr)
{aktualny = glowa; for (int i=1; i != ktory_nr; i++) aktualny = aktualny->nast; ogon = aktualny->nast; aktualny->nast = ogon->nast; delete ogon;
};
void usun_rekordy(SElement*adres)
{
int ile_usun_rekordy=0;while(adres!=NULL) { ile_usun_rekordy++; if(bezwgl_roz>SREDNIA_ROZNICA) { aktualny = glowa; ogon = aktualny->nast; aktualny->nast = ogon->nast; delete ogon; } adres=adres->nast; }
}
int main()
{
cout<<“POCZATKOWA LISTA”<<endl<<endl<<endl;lista();
cout<<"(x),(y)"<<endl<<endl;//to tylko tak dla kosmetyki
pisz(glowa);usun_rekordy(glowa);
cout<<endl<<endl<<endl;
pisz(glowa);/*////////////////////////////////////////////////////////////////////////
//ZMIANY//
///////////////////////////////////////////////////////////////////////
int x,y;
cout<<endl<<endl<<endl<<“WPROWADZAMY NOWA WARTOSC NA 2 POZYCJI”;
cout<<endl<<endl<<"jaka wartosc wprowadzic do x: ";
cin>>x;
cout<<endl<<"jaka wartosc wprowadzic do y: ";
cin>>y;dodaj(x,y);
cout<<endl<<endl<<endl<<“USUNIETO ROWNIEZ 4 ELEMENT LISTY”;
cout<<endl<<endl<<endl<<“LISTA PO ZMIANACH”<<endl<<endl<<endl;usun(3);
pisz(glowa);cout<<endl<<endl<<endl;
*/
///////////////////////////////////////////////////////////////////////
//KASACJA//
//////////////////////////////////////////////////////////////////////
aktualny = glowa;
while (aktualny)
{
glowa=aktualny;
aktualny=aktualny->nast;
//cout << “Kasuje: " << glowa->liczba1 <<”,"<liczba2<< endl;
delete glowa;
//Sleep(20); // tak zeby wygladalo bardziej profesjonalnie
};
glowa = NULL;return 0;
};