Pereiti prie turinio

Reikia pagalbos su C kalba bei CodeBlocks


Rekomenduojami pranešimai

Sveiki, turiu beda. CodeBlocks nepalaiko mano vienos is programu, nezinau kodel. Rytoj reikia atsiskaityti butent per CodeBlocks. Programinta yra per Microsoft Visual C++ 2008. Jei galite uzmeskite aki kas negerai:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct vienkryp // sarasas
{
    char duom[20]; // saraso duomenys
    vienkryp *kitas; // rodykle i sekanti elementa
};
typedef struct vienkryp sarasas;

void reiksmerch(sarasas*, char []); // reiksmes paieska

int main ()
{
   sarasas *pradzia;                         
   pradzia=(sarasas*)malloc(sizeof(sarasas));
   pradzia->kitas=NULL;
int i;
for(int i = 1; i <= 10; i++)
{
	printf("Ivekite %d zodi \n", i);
	sarasas * pag; // saraso rodykle
	pag = new vienkryp; // sukuriamas naujas sarasas
	pag->kitas = pradzia; // pridedama nauja reiksme priekyje
	pradzia = pag;
	scanf("%s",&pag->duom); // nuskaitomi duomenys
}

char zodis[20];
printf("\n Ivekite ieskoma zodi \n");
scanf("%s",&zodis);
reiksmerch(pradzia, zodis);
return 0;
}

void reiksmerch(sarasas *current, char zodis[])
{
bool rasta=false;
   while(current!=NULL)
   {
       if(!strcmp(current->duom, zodis))
	{
		rasta = true;
		break;
	}
	current=current->kitas;
   }
if(rasta)
	printf("Zodis %s sarase rastas \n",zodis);
else
	printf("Zodis %s sarase nerastas \n",zodis);
}

 

 

Kita problema, kad destytojas neleidzia naudoti Go to funkcijos, nors pats ja skaidrese naudoja. Panaudojau Go to funkcija. Tad reiketu kaip nors ja pakeisti. (Sita programa kazkodel veikia per CodeBlocks'a nors taip pat rasyta su ta pacia programa)

 

 

#include <stdio.h>
#include <stdlib.h>

struct medis{ // struktura
       int skaicius; // saugomas skaicius
       struct medis *kaire; // rodykle i kaire
       struct medis *desine; // rodykle i desine
       };

struct vienkryp // sarasas
{
    int skaicius; // saraso duomenys
    struct vienkryp *kitas; // rodykle i sekanti elementa
};

typedef struct medis Medis;
typedef  Medis *MedisPtr;

typedef struct vienkryp *sarasas;

void iterpti(MedisPtr *, int); // iterpimas
void spausdinti1(MedisPtr MusuMedis); // spauzdinimas
void paieska(MedisPtr MusuMedis, int sk); // paieska
MedisPtr salinti(Medis *, int); // salinimas
sarasas perkelti(MedisPtr MusuMedis, sarasas pradzia); // perkelimas i vienkrypti sarasa
void spausdintiVienkrypt(sarasas pradzia); // vienkrypcio saraso spauzdinimas

int main ()
{
   char ch; // raide, ar testi?
   int a,i,reiksme, m;
   static int flag=0;
   MedisPtr saknis=NULL;
sarasas pradzia=NULL;

   do
   {
       again:
       printf("Meniu punktai: \n");
       printf("1) Iterpimas \n");
       printf("2) Spausdinimas \n");
       printf("3) Paieska \n");
       printf("4) Pasalinimas \n");
	printf("5) Perkelti i vienkrypti ir spauzdinti \n");
       printf("6) Iseiti \n");
       scanf("%d",&a);
       if(flag==0 && a!=1 && a!=6)
       {
           printf("\nNO. Pirmiausiai reikia sukurti sarasa \n");
           goto again;
       }
       if(flag==0 && a==1)
		flag=1;
       switch(a)
       {
           case 1:
           printf("Iveskite skaiciu:\n");
           scanf("%d",&m);
           iterpti(&saknis,m);
           break;
           case 2:
           spausdinti1(saknis);
           break;
           case 3:
           printf("Iveskite skaiciu:\n");
           scanf("%d",&m);
           paieska(saknis,m);
           break;
           case 4:
           printf("Iveskite skaiciu:\n");
           scanf("%d",&m);
           salinti(saknis,m);
           spausdinti1(saknis);
           break;
		case 5:
		pradzia=NULL;
		pradzia=perkelti(saknis, pradzia);
		spausdintiVienkrypt(pradzia);
		break;
		case 6:
		return 0;
		break;
       }
       printf("\nAr norite testi? [y/n]\n");
       ch=getchar();
   }while(ch=='Y' || ch=='y');
ch=getchar();
   {
	if(ch=='N' || ch=='n')
		return 0;
       goto again;
   }
  return 0;
}



void iterpti (MedisPtr *MusuMedis, int elem)
{
   if ( *MusuMedis==NULL) // jei tuscias medis
   {
        *MusuMedis=(Medis*)malloc(sizeof(Medis));
        (*MusuMedis)->skaicius=elem; // issaugomas elementas
        (*MusuMedis)->kaire=NULL;
        (*MusuMedis)->desine=NULL;
   }
   else if (elem<(*MusuMedis)->skaicius)
         iterpti(&((*MusuMedis)->kaire),elem);
   else if (elem>(*MusuMedis)->skaicius)
         iterpti(&((*MusuMedis)->desine),elem);
   else printf("Elemento iterpti negalima. Jis jau egzistuoja \n");
}
void spausdinti1(MedisPtr MusuMedis)
{
    if (MusuMedis !=NULL)
    {
       spausdinti1(MusuMedis->kaire);
       printf("%3d", MusuMedis->skaicius);
       spausdinti1(MusuMedis->desine);
    }  
}

void paieska(MedisPtr MusuMedis, int sk)
{
   if(MusuMedis == NULL)
   {
       printf("Skaicius %d neegzistuoja\n", sk);
   }
   else
   if((MusuMedis)->skaicius==sk)
   {
       printf("Skaicius %d medije rastas\n", sk);
   }
   else
   if ((MusuMedis)->skaicius<sk)
	paieska((MusuMedis)->kaire,sk);
else
	paieska((MusuMedis)->desine,sk);
}


MedisPtr salinti(Medis *MusuMedis, int elem)
{
      struct medis *p,*p2;
      if (!MusuMedis) return MusuMedis;
      if (MusuMedis->skaicius==elem)
      {
          if (MusuMedis->kaire==MusuMedis->desine)
           {
             free(MusuMedis);
             return(p);
           }
	else if (MusuMedis->kaire==NULL)
          {
             p=MusuMedis->desine;
             free(MusuMedis);
             return(p);
          }    
          else if (MusuMedis->desine==NULL)
          {
             p=MusuMedis->kaire;
             free(MusuMedis);
             return(p);
          } 
	else
            {
	     p=MusuMedis->kaire;
               while (p->desine) p=p->desine;
     MusuMedis->skaicius=p->skaicius;
	MusuMedis->kaire=salinti(MusuMedis->kaire,p->skaicius);
             }
       } 
if (MusuMedis->skaicius <elem) 
 MusuMedis->desine=salinti(MusuMedis->desine,elem);
  else 
 MusuMedis->kaire=salinti(MusuMedis->kaire,elem);
  return MusuMedis;
}  

sarasas perkelti(MedisPtr MusuMedis, sarasas pradzia)
{
    if (MusuMedis != NULL)
    {
       pradzia = perkelti(MusuMedis->kaire, pradzia);
	vienkryp *pag; // saraso rodykle
	pag = new vienkryp; // sukuriamas naujas sarasas
	pag->kitas = pradzia; // pridedama nauja reiksme priekyje
	pradzia = pag;
       pag->skaicius = MusuMedis->skaicius;
       pradzia = perkelti(MusuMedis->desine, pradzia);
    }
 return pradzia;
}

void spausdintiVienkrypt(sarasas pradzia)
{
   while(pradzia!=NULL)
   {
	printf("%3d", pradzia->skaicius);
	pradzia=pradzia->kitas;
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

struct vienkryp // sarasas
{
    char duom[20]; // saraso duomenys
    struct vienkryp *kitas; // <--- reikia struct keywordo
};

Nesikompiliuoja greičiausiai todėl, kad tu maišai C ir C++. C kalboje nėra "new" raktažodžio, todėl 'new' reiks pakeisti į 'malloc'. Be to, 'bool', reiks pakeisti į 'int', o vietoj true ir false reiks naudoti 1 ir 0.

 

Antroje programoje:

        ch=getchar();
   {
               if(ch=='N' || ch=='n')
                       return 0;
       goto again;
   }

Šitą kodo dalį gali visiškai ištrinti. Po

 printf("\nAr norite testi? [y/n]\n");

reikia fflush(stdin);

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...