Programovacie jazyky, rady, poradňa...
Maniac89
Novice
Príspevky: 9 Registrovaný: 06 jan 2007, 15:44
Príspevok
od používateľa Maniac89 » 23 apr 2009, 20:54
mam takyto nejaky program(neviem ci je dobry
).., ktory funguje tak, ze zadam nejake udaje a ich dam potom zobrazit..zobrazi mi ich, ale ak pridam dalsi zaznam tak mi prepise tie predchadzajuce udaje...vlastne chcem aby to fungovalo tak, ze ak zadam dalsi zaznam, aby tam zostal aj ten prvy...viete mi poradit ako to mam urobit? thanx
Kód: Vybrať všetko
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#define MAX_SIZE_MENO 20
#define MAX_SIZE_PRIEZV 30
#define MAX_SIZE_NAZOV 20
#define MAX_SIZE_VYDAVATELSTVO 20
typedef struct osoba { char *meno;
char *priezvisko;
char *nazov;
char *vydavatelstvo;
int rokvyd;
int cislo;
} PERSON;
void pridaj(void);
void zobraz(void);
static PERSON *os[10];
int i;
void pridaj(void)
{
os[i] = (PERSON*) malloc(sizeof(PERSON));
os[i]->meno = (char*) malloc(MAX_SIZE_MENO*sizeof(char));
os[i]->priezvisko = (char*) malloc(MAX_SIZE_PRIEZV*sizeof(char));
os[i]->nazov = (char*) malloc(MAX_SIZE_NAZOV*sizeof(char));
os[i]->vydavatelstvo = (char*) malloc(MAX_SIZE_VYDAVATELSTVO*sizeof(char));
printf("Meno autora: ");
scanf("%s",os[i]->meno);
printf("Priezvisko autora: ");
scanf("%s",os[i]->priezvisko);
printf("Nayov knihy: ");
scanf("%s",os[i]->nazov);
printf("Rok vydania: ");
scanf("%d",&os[i]->rokvyd);
printf("Vydavatelstvo: ");
scanf("%s",os[i]->vydavatelstvo);
printf("Evidencne cislo: ");
scanf("%d",&os[i]->cislo);
}
void zobraz(void)
{
printf(" Meno a priezvisko: %s %s\n", os[i]->meno, os[i]->priezvisko);
printf(" Nazov: %s\n", os[i]->nazov);
printf(" Rok vydania: %d\n", os[i]->rokvyd);
printf(" Vydavatelstvo: %s\n", os[i]->vydavatelstvo);
printf(" Evid. Cislo: %d\n", os[i]->cislo);
}
int main()
{
int a;
printf("1. Pridaj");
printf("\n2. Ukaz");
printf("\nZadaj:");
scanf("%d",&a);
if(a==1)
{
pridaj();
main();
}
else if(a==2)
{
zobraz();
main();
}
else
exit(0);
getch();
}
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 23 apr 2009, 21:13
Mierne modifikovane.
Kód: Vybrať všetko
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#define MAX_SIZE_MENO 20
#define MAX_SIZE_PRIEZV 30
#define MAX_SIZE_NAZOV 20
#define MAX_SIZE_VYDAVATELSTVO 20
#define MAX_PEOPLE 10
#define CLRSCR system("cls")
typedef struct osoba { char *meno;
char *priezvisko;
char *nazov;
char *vydavatelstvo;
int rokvyd;
int cislo;
} PERSON;
void pridaj(void);
void zobraz(void);
void pridaj(PERSON *os[], int i)
{
os[i] = (PERSON*) malloc(sizeof(PERSON));
os[i]->meno = (char*) malloc(MAX_SIZE_MENO*sizeof(char));
os[i]->priezvisko = (char*) malloc(MAX_SIZE_PRIEZV*sizeof(char));
os[i]->nazov = (char*) malloc(MAX_SIZE_NAZOV*sizeof(char));
os[i]->vydavatelstvo = (char*) malloc(MAX_SIZE_VYDAVATELSTVO*sizeof(char));
printf("Meno autora: ");
scanf("%s",os[i]->meno);
printf("Priezvisko autora: ");
scanf("%s",os[i]->priezvisko);
printf("Nayov knihy: ");
scanf("%s",os[i]->nazov);
printf("Rok vydania: ");
scanf("%d",&os[i]->rokvyd);
printf("Vydavatelstvo: ");
scanf("%s",os[i]->vydavatelstvo);
printf("Evidencne cislo: ");
scanf("%d",&os[i]->cislo);
}
void zobraz(PERSON *os[], int i)
{
int j;
for (j = 0; j < i; j++) {
printf("\n Meno a priezvisko: %s %s\n", os[j]->meno, os[j]->priezvisko);
printf(" Nazov: %s\n", os[j]->nazov);
printf(" Rok vydania: %d\n", os[j]->rokvyd);
printf(" Vydavatelstvo: %s\n", os[j]->vydavatelstvo);
printf(" Evid. Cislo: %d\n", os[j]->cislo);
}
}
int main(void)
{
int a, i = 0;
PERSON *os[MAX_PEOPLE];
while (1) {
printf("Zadaj:\n");
printf("1. Pridaj\n");
printf("2. Ukaz\n");
printf("3. Koniec\n");
a = getch();
switch (a) {
case '1':
if (i <= MAX_PEOPLE) {
pridaj(os, i);
i++;
} else {
printf("Plne pole.\n");
getch();
return 1;
}
break;
case '2':
zobraz(os, i);
getch();
break;
case '3':
return 0;
}
CLRSCR;
}
}
Maniac89
Novice
Príspevky: 9 Registrovaný: 06 jan 2007, 15:44
Príspevok
od používateľa Maniac89 » 23 apr 2009, 21:23
no takto som si to predstavoval..dakujem ti
neppo
Light Professional
Príspevky: 774 Registrovaný: 09 jún 2005, 15:33
Príspevok
od používateľa neppo » 24 apr 2009, 10:06
podla mna by sa to jednoduchsie riesilo cez smerniky ako cez staticke pole
Maniac89
Novice
Príspevky: 9 Registrovaný: 06 jan 2007, 15:44
Príspevok
od používateľa Maniac89 » 24 apr 2009, 11:27
a dalo by sa este urobit tak, ze ak zadam poradove cislo zaznamu, ktory chcem odstranit..a odstrani mi ho ?
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 24 apr 2009, 14:36
neppo napísal: podla mna by sa to jednoduchsie riesilo cez smerniky ako cez staticke pole
S pointermi by to bolo praveze imho komplikovanejsie, avsak pocet vlozenych prvkov by nebol obmedzeny.
Maniac89 napísal: a dalo by sa este urobit tak, ze ak zadam poradove cislo zaznamu, ktory chcem odstranit..a odstrani mi ho ?
Samozrejme, ze hej, napr. ak chces zmazat treti prvok pola, tak si zoberies posledny a prekopirujes ho do tretieho, pricom zmensis premennu udavajucu aktualny pocet prvkov v poli(nezachova sa ti vsak poradie, v akom boli prvky vkladane).
neppo
Light Professional
Príspevky: 774 Registrovaný: 09 jún 2005, 15:33
Príspevok
od používateľa neppo » 24 apr 2009, 16:07
ano mas pravdu pointre su komplikovanejsie ale ako si napisal mozes mat neobmedzeny pocet ( teda v zavislosti od pamate ). ale na druhej strane sa niekedy pointery hodia ovela viac do programu
Maniac89
Novice
Príspevky: 9 Registrovaný: 06 jan 2007, 15:44
Príspevok
od používateľa Maniac89 » 24 apr 2009, 17:46
neutronmind napísal: Samozrejme, ze hej, napr. ak chces zmazat treti prvok pola, tak si zoberies posledny a prekopirujes ho do tretieho, pricom zmensis premennu udavajucu aktualny pocet prvkov v poli(nezachova sa ti vsak poradie, v akom boli prvky vkladane).
pls, nemohol by si mi napisat ako by sa to dalo urobit?..skusam to, no nejak mi to stale nejde,tak ako ma
bbeni
Novice
Príspevky: 3 Registrovaný: 29 apr 2009, 20:47
Príspevok
od používateľa bbeni » 29 apr 2009, 21:08
je to
staticke pole a dynamická velkost?
Miskok
Amateur
Príspevky: 28 Registrovaný: 18 mar 2007, 16:50
Bydlisko: BB - KE
Príspevok
od používateľa Miskok » 30 apr 2009, 22:34
Maniac89 napísal: pls, nemohol by si mi napisat ako by sa to dalo urobit?..skusam to, no nejak mi to stale nejde,tak ako ma
bolo by ale dobre aj ukazat co si tam doplnil aby sa dalo povedat preco ti to nejak nejde ako ma ..
>bbeni
ano
Maniac89
Novice
Príspevky: 9 Registrovaný: 06 jan 2007, 15:44
Príspevok
od používateľa Maniac89 » 05 máj 2009, 19:32
..uz sa mi podarilo vyriesit to odstranovanie poloziek...
potreboval by som pomoct s dalsim kodom..kde mam naprogramovane triedenie zadanych mien podla abecedy..ako by sa to dalo urobit tak, aby mi to zotriedilo podla dlzky retazca, cize mena (vzostupne aj zostupne)?
Kód: Vybrať všetko
#include <stdio.h>
#include <string.h>
#include <conio.h>
void sort(char**, int);
main()
{
char ret[50][20], *px[50];
int n, i;
printf("Zadaj pocet osob: ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("\n %d . meno : ", i + 1);
scanf("%s", ret[i]);
px[i] = ret[i];
}
sort(px,n);
for(i=0; i<n; i++)
printf("\n %s %s", ret[i], px[i]);
getch();
}
void sort(char **px, int n)
{
int i, j;
char *pom;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if (strcmp(*(px + j), *(px + i)) < 0)
{
pom = *(px + i);
*(px + i) = *(px + j);
*(px + j) = pom;
}
}
}
}
bbeni
Novice
Príspevky: 3 Registrovaný: 29 apr 2009, 20:47
Príspevok
od používateľa bbeni » 06 máj 2009, 11:17
ako mas spravene vyhladavanie a odstranenie