jo to by taky šlo :-)
Díky!
Příspěvky odeslané z IP adresy 89.102.243.–
ještě bych to potřeboval omezit jen na celá čísla
Ahoj, potřeboval bych poradit jak mám ošetřit vstupy, aby tam nešli zadat záporná čísla a zároveň jen čísla z intervalu 0-xx
typedef struct vozidla_struct
{
char vyrobce[20];
char typ[20];
double pocet;
double cena;
vozidla_struct *pNI;
}vozidla;
vozidla_struct *pFI=NULL;
//Funkcni prototypy
vozidla *konec (void);
int nove_vozidlo (void);
void hledej_vozidlo (void);
void mazani (void);
void pridani_vozidla (void);
void prodej_vozidla (void);
void vypis_vozidel (void);
int cteni_souboru (char*jmeno);
int _tmain(int argc, _TCHAR* argv[])
{
char vyber;
int nacteni;
nacteni = (cteni_souboru("automobily.dat"));
if ( nacteni > 0 )
printf("\nSoubor byl uspesne nacten.\n");
do
{
printf("*******************************************************************************\n");
printf("\nDobry den, vitejte v seznamu vozidel nasi prodejny.\n");
printf("\nVypis seznamu dostupnych vozidel - v\nZadani noveho vozidla do seznamu - n\nVymazani vozidla ze seznamu - m");
printf("\nPrijeti vozidla na prodejnu - p\nProdej vozidla - s\nVyhledani vozidla - z\nKonec - k\n");
printf("\n*******************************************************************************\n");
printf("\nZadejte prosim Vas pozadavek:");
vyber=getchar();
vyber=toupper(vyber);
while (getchar()!='\n');
switch (vyber)
{
case 'N':
nove_vozidlo();
while (getchar()!='\n');
system ("CLS");
break;
case 'Z':
hledej_vozidlo();
while (getchar()!='\n');
system ("CLS");
break;
case 'S':
prodej_vozidla();
while (getchar()!='\n');
system ("CLS");
break;
case 'P':
pridani_vozidla();
while (getchar()!='\n');
system ("CLS");
break;
case 'M':
mazani();
while (getchar()!='\n');
system ("CLS");
break;
case 'V':
vypis_vozidel();
while (getchar()!='\n');
system ("CLS");
break;
case 'K':
printf("\nNashledanou\n");
while (getchar()!='\n');
system ("CLS");
break;
default:
printf("\nSpatna volba. Opakujte zadani.\n");
while (getchar()!='\n');
system ("CLS");
break;
}
}while(vyber!='K');
FILE*soubor=fopen("automobily.dat","w");
vozidla *s=pFI;
if(soubor==0)
{
printf("\nSoubor se nevytvoril");
}
while(s!=NULL)
{
fwrite(s,sizeof(vozidla),1,soubor);
s=s->pNI;
}
fclose(soubor);
while (getchar()!='\n');
return 0;
}
// Funkce
vozidla *konec (void)
{
vozidla *ptemp;
if(pFI==NULL) //prazdna struktura
return NULL;
for(ptemp=pFI;ptemp->pNI!=NULL;ptemp=ptemp->pNI);
return ptemp;
}
int nove_vozidlo (void)
{
vozidla *pnovy,*ppomocna;
if ((pnovy=(vozidla *) malloc(sizeof(vozidla)))==NULL)
return 0;
pnovy->pNI=NULL;
printf("\nZadejte vyrobce vozidla: ");
scanf("%20s",pnovy->vyrobce);
while(getchar()!='\n');
printf("\nZadejte typ vozidla: ");
scanf("%20s",pnovy->typ);
while(getchar()!='\n');
printf("\nZadejte pocet vozidel: ");
scanf("%Lf",&pnovy->pocet);
while(getchar()!='\n');
printf("\nZadejte cenu vozidla: ");
scanf("%Lf",&pnovy->cena);
while(getchar()!='\n');
if (NULL==(ppomocna=konec()))
pFI=pnovy;
else
ppomocna->pNI=pnovy;
return 1;
}
void hledej_vozidlo (void)
{
char automobil[20], druh[20];
double kusy,hodnota;
vozidla *ptemp;
if(pFI==NULL)
{
printf("\nNa prodejne nejsou zadna vozidla.\n");
return;
}
printf("\nZadejte vyrobce automobilu: ");
scanf("%20s",automobil);
while(getchar()!='\n');
printf("\nZadejte typ automobilu: ");
scanf("%20s",druh);
while(getchar()!='\n');
ptemp=pFI;
while(ptemp!=NULL)
{
if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
{
printf("\nVozidlo bylo nalezeno.\n");
kusy=ptemp->pocet;
hodnota=ptemp->cena;
printf("\nNa prodejne je prave %12.2f vozidel tohoto typu.\nCena jednoho tohoto vozidla je %12.2f Kc.\n",kusy,hodnota);
ptemp=ptemp->pNI;
return;
break;
}
else
{
ptemp=ptemp->pNI;
}
}
printf("\nVozidlo nebylo nalezeno\n");
return;
}
void mazani (void)
{
char automobil[20],druh[20],souhlas;
double kusy;
vozidla *ptemp,*ptemp2;
if(pFI==NULL)
{
printf("\nNa prodejne nejsou zadna vozidla.\n");
return;
}
printf("\nZadejte vyrobce automobilu: ");
scanf("%20s",automobil);
while(getchar()!='\n');
printf("\nZadejte typ automobilu: ");
scanf("%20s",druh);
while(getchar()!='\n');
ptemp=pFI;
if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
{
printf("\nVozidlo bylo nalezeno.\n");
printf("\nOpravdu smazat? a/n? :");
souhlas=getchar();
while(getchar()!='\n');
kusy=ptemp->pocet;
if (souhlas=='a')
{
if (ptemp=pFI)
{
ptemp=pFI->pNI;
free(pFI);
pFI=ptemp;
}
printf("\nVozidlo bylo vymazano.");
printf("\nPred vymazanim bylo v seznamu %12.2f vozidel.\n",kusy);
while(getchar()!='\n');
return;
}
else
{
printf("\nPozadovana akce nebyla provedena.\n");
while(getchar()!='\n');
return;
}
}
else
{
ptemp=pFI;
for(ptemp2=pFI,ptemp=pFI->pNI;ptemp!=NULL;ptemp2=ptemp,ptemp=ptemp->pNI)
{
if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
{
printf("\nVozidlo bylo nalezeno.\n");
printf("\nOpravdu smazat? a/n? :");
souhlas=getchar();
while(getchar()!='\n');
kusy=ptemp->pocet;
if (souhlas=='a')
{
ptemp2->pNI=ptemp->pNI;
free(ptemp);
printf("\nVozidlo bylo vymazano.");
printf("\nPred vymazanim bylo v seznamu %12.2f vozidel.\n",kusy);
while(getchar()!='\n');
return;
break;
}
else
{
printf("\nPozadovana akce nebyla provedena.\n");
while(getchar()!='\n');
return;
}
}
}
}
printf("\nVozidlo v seznamu nebylo nalezeno.\n");
return;
}
void pridani_vozidla (void)
{
char automobil[20],druh[20];
double kusy,novinka;
vozidla *ptemp;
if(pFI==NULL)
{
printf("\nNa prodejne nejsou zadna vozidla.\n");
return;
}
printf("\nZadejte vyrobce automobilu: ");
scanf("%20s",automobil);
while(getchar()!='\n');
printf("\nZadejte typ automobilu: ");
scanf("%20s",druh);
while(getchar()!='\n');
ptemp=pFI;
while(ptemp!=NULL)
{
if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
{
printf("\nVozidlo bylo nalezeno.\n");
printf("\nZadejte pocet novych vozidel: ");
scanf("%Lf",&novinka);
kusy=ptemp->pocet+novinka;
printf("\nNa prodejne je %12.2f vozidel.\n",kusy);
ptemp->pocet=kusy;
while(getchar()!='\n');
return;
break;
}
else
{
ptemp=ptemp->pNI;
}
}
printf("\nVozidlo v seznamu nebylo nalezeno.\n");
return;
}
void prodej_vozidla (void)
{
char automobil[20],druh[20];
double kusy,novinka;
vozidla *ptemp;
if(pFI==NULL)
{
printf("\nNa prodejne nejsou zadna vozidla.\n");
return;
}
printf("\nZadejte vyrobce vozidla: ");
scanf("%20s",automobil);
while(getchar()!='\n');
printf("\nZadejte typ vozidla: ");
scanf("%20s",druh);
while(getchar()!='\n');
ptemp=pFI;
while(ptemp!=NULL)
{
if((strcmp(ptemp->vyrobce,automobil)==0)&&(strcmp(ptemp->typ,druh)==0))
{
printf("\nVozidlo bylo nalezeno.\n");
printf("\nZadejte pocet prodanych vozidel:");
scanf("%Lf",&novinka);
kusy=ptemp->pocet-novinka;
if (kusy<0)
{
printf("\nNa prodejne neni dostatek pozadovanych vozidel. Prodej se neustutecnil.\n");
while(getchar()!='\n');
return;
break;
}
else
{
printf("\nPocet kusu ve skladu: %12.2f\n",kusy);
ptemp->pocet=kusy;
while(getchar()!='\n');
return;
break;
}
}
else
{
ptemp=ptemp->pNI;
}
}
printf("\nVozidlo v seznamu nebylo nalezeno.\n");
return;
}
void vypis_vozidel (void)
{
vozidla *ptemp;
printf("\n Vyrobce Znacka Kusy Cena");
for(ptemp=pFI;ptemp!=NULL;ptemp=ptemp->pNI)
{
printf("\n%20s",ptemp->vyrobce);
printf("%20s",ptemp->typ);
printf("%12.2f",ptemp->pocet);
printf("%12.2f",ptemp->cena);
}
printf("\n");
return;
}
int cteni_souboru (char*jmeno)
{
FILE *soubor=fopen(jmeno,"r");
vozidla *s,*konec=NULL;
unsigned int pocet_struktur, velikost,provedeno=0,i=0;
unsigned int poloha=ftell(soubor);//zaloha aktualni pozice
fseek(soubor,0,SEEK_END);//na konec
velikost=ftell(soubor);//zjisteni velikosti
fseek(soubor,poloha,SEEK_SET);//presun zpet
pocet_struktur=velikost/sizeof(vozidla); //zjisteni poctu struktur
for(i=0;i<pocet_struktur;i++)
{
s=(vozidla*)malloc(sizeof(vozidla));//alokace pameti
if(s!=NULL)
{
provedeno=fread(s,sizeof(vozidla),1,soubor);
if (provedeno>0)
{
if(pFI==NULL)
pFI=s;
s->pNI=NULL;
if(konec!=NULL)
konec->pNI=s;
konec=s;
}
else
break;
}
else
break;
}
fclose(soubor);
return provedeno;
}
Ahoj, potřeboval bych zkontrolovat několik programů, případně opravit, nebo doplnit. Mám to do školy a už jsem z toho fakt zoufalý... Peněžní odměna jistá!
kdyby mi někdo mohl poradit, prosím ozvěte se mi na email: mkotry@seznam.cz
byl bych moc vděčný...
no sám tomu zadání právě moc nerozumím...
přesné zadání bylo:
Napište funkci, která má parameter 32-prvkové pole typu unsigned char a návratovou hodnotu typu unsigned int. Funkce uloží nejvyšší (7.) bit prvků pole do jednotlivých bitů výsledku funkce. Napište příklad volání funkce, nezapomeňte na deklaraci použitých proměnných.
díky :)
málem jsem zapomněl.... díky ;)
ještě takový dotaz a co by mi měl hodit tento program .... nechce se mi to vypisovat
int i;
i=“Z“- “A“+1;
Zdravím, potřeboval bych poradit s jednou otázkou co jsme měli v testu... když to zkouším ve wxDEV tak se mi to nezkompiluje... (asi to píšu stejně špatně)
typedef struct dataItem_struct
{
double value;
dataItem_struct *pNextItem;
} dataItem;
dataItem *first, *pom;
Co udělá příkaz
for(pom=first;pom->pNextItem!=NULL; pom=pom->NextItem);
A jaká chyba v programu nastane v předchozím programu v případě, že vázaný seznam bude prázdný
(v proměnné first je NULL)???