ohledně těch referencí , to by mi nepomohlo , je to vlastně jen obejítí globální promené,v té funkci sem ješte s a,b pracoval před ifem a vyhovovalo mi že při dalším voláním byly vstupní parametry nezměné, a mohl se mi korektně porovnavat if
Příspěvky odeslané z IP adresy 85.92.58.–
díky, nakonec sem tu funkci zrušil a dal si ji do mainu, stejně v ní byl jen jede if.
ale zas sem se něco nového dozvědel.
Se strukturama v C nerad pracuju, připomína mě že na struktury(objekty) je lepsi c++ které neumím,a co neumím mě deprimuje :D
nerozumím tomu kodu, kde se mi vysledky te fce vkladaji do mích promených?
Zdravím
je možné aby mi funkce vracela 2 čísla do nejakých proměných najednou, tzn při jednom zavolání?
bez použití globálních proměných?
Mám na mysly něco takovehoto
int fce(int a, int b){
if(a == b){
a=(b - 2);
b= 5;
}
return a,b
}
void main(void){
int a,b;
a,b = fce(a ,b); //takhle to asi nemužu napsat, jak jinak to udělat?
}
a když chci dát ten výpis matice jako funkci ... proc mi nejde tohle?
program se zacyklí
void vypisMatice(){
printf("\n\n\n\n");
for(i = 0; i < pocetMnozin ; i++){ //vypis finalni matice
for (j = 0; j < velikostiMnozin[i]; j++)
printf("%i ", mnozinyPole[i][j]);
printf("\n");
}
}
pořád si s tím nevím rady
mam matici (nebo můžu použít data z přímo z texťáku - vyhnu se tak 2 vnořeným forům) a chci ji přepsat do pole tak aby tam nebyly duplicitní čísla) pokud možno tak aby to výsledné pole bylo velké jako počet neduplicitních míst
Zdravím
mam v souboru nějaké čísla a já je chci uložit do pole tak aby aby sem každe čislo jen jednou a pokud možno aby moje finalní pole bylo dynamické podle počtu neduplicitních prvků
chci udělat takové sjednocení množin ale jen s jednou množinou
proč mi nefrčí tohle? :
int tmp;
rewind(fr);
for(i=0; i< pocetPrvkuMatice ;i++){
fscanf(fr, "%d", &tmp);
for(k =0; k<pocetPrvkuMatice;k++){
if(tmp != universum[k]){
universum[i]=tmp;
}
}
}
Tak se mi povedlo to sesmolit
Naplnění matice ze souboru když neznáme jeho velikost
třeba to někomu v budoucnu ulehčí práci
#include <stdio.h>
#include <stdlib.h>
int c;
int pocetMnozin= 0;
int PocetMnozin(FILE * fr){ // kvuli poctu mnozin(radku) matice
while((c = getc(fr)) != EOF){
if(c == '\n')
pocetMnozin++;
}
}
int main(void){
FILE *fr;
if((fr = fopen("mnoziny.txt","r")) == NULL){ //test otevreni
printf("Soubor se nepodarilo otevrit.\n");
system("pause");
return 1;
}
int i=0;
PocetMnozin(fr);
printf("pocet mnozin (radku) %d\n",pocetMnozin);
int *velikostiMnozin; //jednorozmerne pole
velikostiMnozin= (int*) calloc( pocetMnozin , sizeof(int));
rewind(fr);
while((c = getc(fr)) != EOF){ /* přečtení souboru */
while((c =getc(fr)) != '\n'){
if(c == ' ' ){ //mezer je vzdy o 1 min nez cisel , nekde pridat +1
velikostiMnozin[i]++;
}
}
velikostiMnozin[i]++; // zde pridavam tu +1
i++;
}
int **mnozinyPole; //matice pro mnoziny
mnozinyPole = (int **)calloc( pocetMnozin , sizeof(int *)); //zde si alokuju kolik ma mit matice radku
int j = 0;
rewind(fr);
for(i= 0; i< pocetMnozin ; i++){
mnozinyPole[i] = (int *)calloc( velikostiMnozin[i] , sizeof(int)); //tady alokuju sloupecky kazdeho radku
for(j=0; j<velikostiMnozin[i]; j++){
fscanf(fr, "%d", &mnozinyPole[i][j]); //tady matici plním
}
}
printf("\n\n\n\n");
for(i = 0; i < pocetMnozin ; i++){ //vypis finalni matice
for (j = 0; j < velikostiMnozin[i]; j++)
printf("%i ", mnozinyPole[i][j]);
printf("\n");
}
if (fclose(fr) == EOF){ /* test zavření souboru*/
printf("Soubor se neporadilo zavrit\n");
return 1;
}
system("PAUSE");
return 0;
}
tak konečně sem si spočítal velikosti souboru
rewind(fr);
while((c = getc(fr)) != EOF){ /* přečtení souboru,eof je konstanta */
while((c =getc(fr)) != '\n'){
if(c == ' ' ){ //mezer je vzdy o 1 min nez cisel , nekde pridat +1
velikostiMnozin[i]++;
}
}
velikostiMnozin[i]++; // tady si pridavam +1
i++;
}
Tak sem s tím trochu pohnul , jen se mi to cyklí a není my jasné proč, ten vnitřní while přece narazí na \n ale i tak se neukončí
#include <stdio.h>
#include <stdlib.h>
// pro velikost pole
int c;
int pocetMnozin= 0;
int PocetMnozin(FILE * fr){ // kvuli vysce matice
while((c = getc(fr)) != EOF){
if(c == '\n')
pocetMnozin++;
}
}
int main(void){
FILE *fr;
if((fr = fopen("mnoziny.txt","r")) == NULL){
printf("Soubor se nepodarilo otevrit.\n");
system("pause");
return 1;
}
int i=0;
PocetMnozin(fr);
printf("pocet mnoz %d,\n",pocetMnozin);
int *velikostiMnozin;
velikostiMnozin= (int*) calloc( pocetMnozin , sizeof(int));
rewind(fr);
while((c = getc(fr)) != EOF){
while(c != '/n'){
printf("zde se mi to mrcha cykli");
if(c == ' '){
printf("velikosti uvnitr %d",velikostiMnozin[i]);
velikostiMnozin[i]++;
}
}
i++;
}
for (i = 0; i < pocetMnozin; i++){ //vypis pole s velikostma (jen pro kontrolu
printf("%i, ", velikostiMnozin[i]);
}
if (fclose(fr) == EOF){ /* test zavření */
printf("Soubor se neporadilo zavrit.\n");
return 1;
}
system("PAUSE");
return 0;
}
to se mi zdá divné
já si přece v tom souboru můžu zjistit počet řádků, teď udělám podle tohoto počtu jedno pole a do něj můžu zapisovat délky řádků. teď bych teoreticky mohl udělat matici vysokou jako počet řádků a širokou jako příslušná pozice v mojem poli délek řádků.
Jde to takhle?
Ja se to snažím naťukat ale sekl sem se , nejede mi to ani pro šířku rádku :(
udělal sem zatím toto:
:(
#include <stdio.h>
#include <stdlib.h>
// pro velikost pole
int c;
int PocetMnozin(void){ // kvuli vysce matice
int pocetMnozin= 0;
FILE *fr;
while((c = getc(fr)) != EOF){ /* přečtení souboru,eof ej konstanta */
if(c == '\n')
pocetMnozin++;
}
return pocetMnozin;
}
int main(void){
FILE *fr;
if((fr = fopen("mnoziny.txt","r")) == NULL){ /* test ověření , null je absolutni nula kontanta*/
printf("Soubor se nepodarilo otevrit.\n");
system("pause");
return 1;
}
printf("pocet mnoz %d",PocetMnozin());
int *velikostiMnozin; //jednorozmerne pole
velikostiMnozin= (int*) malloc(PocetMnozin() *sizeof(int));
int i=0;
while((c = getc(fr)) != EOF){ /* přečtení souboru,eof ej konstanta */
while(c != '/n'){
if(c == ' ')
velikostiMnozin[i]= +1;
}
i++;
}
for (i = 0; i < 5; i++){
printf("%i, ", velikostiMnozin[i]);
}
/*
while(!feof(fr)){
while((c = getc(fr)) != '/n'){
}
fscanf(fr, "%f", &v[i++]);
*/
/*
int **mnozinyPole; //matice pro mnoziny
mnozinyPole = (int **)malloc(PocetMnozin() * sizeof(int *));
//od cyklu kvuli zapisu
mnozinyPole[0] = (int *)malloc(3 * sizeof(int));
*/
if (fclose(fr) == EOF){ /* test zavření */
printf("Soubor se neporadilo zavrit.\n");
return 1;
}
system("PAUSE");
return 0;
}
Vstupní soubor může vypadat nějak takhle:
1 2 3 4 5
6 6 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23
22 5 16 5 8 11
Pochopil sem že matici budu dělat dynamicky jak do šířky tak do délky, takže před samotným deklarováním matice si musím spočítat počet řádku a do nějakého pole budu ještě ukládat velikost každého řádku.Problém mám jak ty čísla dostat do té matice.
Zdravím
Mám napsat Set-Cover ale data beru z texťáku ve kterém mam množiny jako řádky, kde jsou čísla oddělená mezerou
chci to načíst do matice a nevím jak na to, nějak sem to plácal ale nepovedlo se.
jeste bych se zeptal jak mam osetrit nejaky program proti tomu aby mi tam nezadavaly pismena misto cisel
uz mam osetrene cisla jen v rozmezi ale s pismeny si nevym rady
mam tam while(1<=volbaVmenu<=4)
tak nejak trochu mi to funguje
po pouziti mi zas blbne jina funkce ale samotne printf uz jede
dekuju
jo a fci volam s f ....print(f);
typedef struct prvek{
int hodnota;
struct prvek *spoj;
}PRVEK;
typedef struct fronta{
PRVEK *celo;
PRVEK *konec;
}FRONTA;
void print (PRVEK *p){
while (p!=NULL) {
printf ("%d\t", p -> hodnota);
p = p -> spoj;
}
}
pokud to tu jeste neni moc mrtve
jak by vypadala funkce pro vytisknuti cele fronty prosim?