Anonymní profil Horracio – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Horracio – Programujte.comAnonymní profil Horracio – Programujte.com

 

Příspěvky odeslané z IP adresy 77.92.207.–

Horracio
C / C++ › Seřazení dynamického pole st…
7. 4. 2016   #209768

#6 KIIV

Mnohokrát děkuji, vše funguje jak má. Nyní už vidím i ty absurdní chyby, které jsem udělal (např: úplné vynechání fclose a spoustu dalších věcí).

Jsem pouze samouk začátečník, každopádně děkuji za lekci.

Horracio
C / C++ › Seřazení dynamického pole st…
7. 4. 2016   #209765

#2 KIIV

Trochu jsem to pozměnil v téhle části, kde jsem myslel, že by mohl být zakopaný pes, ale bohužel.

Alespoň nějaký konkrétnější tip, v čem by to mohlo být ? 

poleStudentu = (Student *) calloc(100, sizeof(Student));
	if(poleStudentu == NULL) {
            printf("Nedostatek pameti!\n");
			getchar();
            exit(1);
        }

	while(1){
		for (int i = 0; i < p; i++){
			if(fscanf(vstup, "%s %s %f", poleStudentu[i].Jmeno , poleStudentu[i].Prijmeni , &poleStudentu[i].znamka) == EOF){
				p = 0;}
	
	}}

	int pocetPrvku=sizeof(poleStudentu)/sizeof(Student);
	
	poleStudentu = (Student*)realloc(poleStudentu, pocetPrvku * sizeof(Student));
		if(poleStudentu == NULL) {
            printf("Nedostatek pameti!\n");
			getchar();
            exit(1);
        }
	
	qsort(poleStudentu, pocetPrvku, sizeof(Student), &porovnejStudenty);
Horracio
C / C++ › Seřazení dynamického pole st…
7. 4. 2016   #209762

Dobrý večer, při spuštění mého kódu a zadání názvu souboru mi vyskočí chyba program ......exe přestal pracovat. Kód jsem si procházel několikrát a chybu nemohu najít. Překladač žádný error ani warning nevyhazuje.(používám CodeLite s TDM-GCC)

Jen kdyby náhodou, vstupní soubor vypadá nějak takhle:

Jarmila Adamkova 36
Jiri Lapcik 22
Milan Petru 12.7
Milena Novakova 37.5

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

FILE *vstup;

typedef struct 
{
	char * Jmeno;
	char * Prijmeni;
	float znamka;
	} Student;
	
	int porovnejZnamky(float a, float b){
		if (a<b) return -1;
		if (a>b) return 1;
		return 0;
		};
		
		
int porovnejStudenty(const void *n1,const void *n2){  
		if ((strcmp (((Student*)n1)->Prijmeni,((Student*)n2)->Prijmeni))==0) { 
				if ((strcmp (((Student*)n1)->Jmeno,((Student*)n2)->Jmeno))==0) {
					porovnejZnamky(((Student*)n1)->znamka,((Student*)n2)->znamka);
					}
					
				else return strcmp (((Student*)n1)->Jmeno,((Student*)n2)->Jmeno); 
			}
		else return strcmp (((Student*)n1)->Prijmeni,((Student*)n2)->Prijmeni); 
		};

Student *poleStudentu;

int main(int argc, char **argv)
{	
	
	char soubor[256];
	int p = 255;
	
	if (argc>1){
				
				vstup = fopen(argv[1], "r");
				if (vstup == NULL){
							printf("\nVstupni soubor nelze otevrit\n");
							return 1;
							}
				}
				
	else{
			printf("\nZadejte nazev vstupniho souboru: ");
			gets(soubor);
			vstup = fopen(soubor, "r");
			if (vstup == NULL){
							printf("\nVstupni soubor nelze otevrit\n");
							return 1;
							}
		}

	poleStudentu = (Student *) malloc(10 * sizeof(Student));
	if(poleStudentu == NULL) {
            printf("Nedostatek pameti!\n");
			getchar();
            exit(1);
        }

	while(1){
	for (int i = 0; i < p; i++){
	if (i%10==0){ 
	poleStudentu = (Student*)realloc(poleStudentu, (i+10) * sizeof(Student));}
		if(poleStudentu == NULL) {
            printf("Nedostatek pameti!\n");
			getchar();
            exit(1);
        }
	if(fscanf(vstup, "%s %s %f", poleStudentu[i].Jmeno , poleStudentu[i].Prijmeni , &poleStudentu[i].znamka) == EOF){
			p = 0;}
	
	}}

	int pocetPrvku=sizeof(poleStudentu)/sizeof(Student);
	
	qsort(poleStudentu, pocetPrvku, sizeof(Student), &porovnejStudenty);
	
		printf("Serazeni studenti: \n");
	for (int i = 0; i < pocetPrvku; i++){
	printf("\n%s %s %0.2f", poleStudentu[i].Jmeno, poleStudentu[i].Prijmeni, poleStudentu[i].znamka);}
		
		free(poleStudentu);
		getchar();
		return 0;
		
		
}
Srna z Brna
C / C++ › Histogram
3. 4. 2016   #209572

Děkuji oběma borcům za pomoc s řešením, nejspíš jsem už i přišel na to v čem jsem měl chybu.    

Srna z Brna
C / C++ › Histogram
3. 4. 2016   #209565

#4 BDS
 

ano to vím, nicméně to byla pouze moje snaha vyvarovat se tomuto výstupu:

Připojen obrázek.

Připojen obrázek.

při zadávání čísel musím vždy zadat jedno navíc které se jakoby do pole nezapíše(počet čísel 5 musím zadat 6) a také mám nejspíš nějakou chybu v cyklu for(j = 2; ....) 

Srna z Brna
C / C++ › Histogram
2. 4. 2016   #209553

#2 BDS
 

#include <stdio.h>


int  i, j, p, k;
double a = 0.0 , b = 10.0;
double cislo;
	

int main()
{	
	printf("Zadej pocet cisel v poli: ");
	scanf("%d",&p);
	
	double* pole = (double*)malloc(p * sizeof(double));
	
	for(i = 1;i <= p;i++) {
		printf("Zadej cisla: ");
		scanf(" %lf ", &(*(pole+i)));
		}
		
	printf("Vypis pole: \n");
	
	for(i = 1; i <= p; i++) {  
		printf("%.2lf ", *(pole+i)); }
		
	printf("\n");
	
	printf("Zadej pocet kategorii (0-10,10-100,100-1000,atd.): ");
	scanf(" %d ", &k);
	k++;
	
	printf("Kategorie 0 - 10: \n");
	for(i = 1; i <= p; i++) { 
		if ((*(pole+i) >= a) && (*(pole+i) <= b)){
		printf("%.2lf ", *(pole+i));} }
		
	a = 10.0;
	b= 100.0;	
	
	for(j = 2; j < k; j++) {
	printf("Kategorie %.0lf - %.0lf: \n" , a ,b);
		for(i = 1; i <= p; i++) { 
				if ((*(pole+i) >= a) && (*(pole+i) <= b)){
					printf("%.2lf ", *(pole+i));} 
				} printf("\n");
	a = a * 10.0;
	b = b * 10.0;							
	}
	
	
	free(pole);
	return 0;			
}

upraveno na dynamické pole(zatím bez ošetření), ale stále mi to vypisuje nekonečný počet kategorií... přitom tohle mám ošetřeno cyklem for.

Srna z Brna
C / C++ › Histogram
2. 4. 2016   #209548

Dobrý den ve spolek, mám zadání vytvořit histogram ze vstupních hodnot. Kategorie 0-10, 10-100 atd. Počet kategorií má být proměnná. Něco jsem již splácal, ale má to své mouchy. Potřeboval bych poradit jak se jich zbavit.

#include <stdio.h>


int  i, j, p, k;
double a = 0.0 , b = 10.0;
double cislo;
	

int main()
{	
	printf("Zadej pocet cisel v poli: ");
	scanf("%d",&p);
	
	double pole[p];
	
	for(i = 1;i <= p;i++) {
		printf("Zadej cisla: ");
		scanf(" %lf ", &pole[i]);
		}
		
	printf("Vypis pole: \n");
	
	for(i = 1; i <= p; i++) {  
		printf("%.2lf ", pole[i]); }
		
	printf("\n");
	
	printf("Zadej pocet kategorii (0-10,10-100,100-1000,atd.): ");
	scanf(" %d ",&k);
	k++;
	
	printf("Kategorie 0 - 10: \n");
	for(i = 1; i <= p; i++) { 
		if ((pole[i] >= a) && (pole[i] <= b)){
		printf("%.2lf ", pole[i]);} }

	printf("\n");	
	a = 10.0;
	b= 100.0;	
	
	for(j = 2; j < k; j++) {
	printf("Kategorie %.0lf - %.0lf: \n" , a ,b);
		for(i = 1; i <= p; i++) { 
				if ((pole[i] >= a) && (pole[i] <= b)){
					printf("%.2lf ", pole[i]);} 
					} printf("\n");
	a = a * 10.0;
	b = b * 10.0;							
	}
	
	
	
	return 0;			
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý