Prvočísla z matice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prvočísla z matice – C / C++ – Fórum – Programujte.comPrvočísla z matice – C / C++ – Fórum – Programujte.com

 

Lukáš
~ Anonymní uživatel
301 příspěvků
5. 5. 2020   #1
-
0
-

 Ahoj, 

potřeboval bych poradit s úkolem... Mám za úkol do matice nagenerovat náhodná čísla. Počet řádků a sloupců matice se načtou z texťáku. Pak program má vypsat do texťáku vypsat prvočísla... Ale nevypisuje mi to nic a vůbec nevím co mám špatně. Nějaké rady, prosím?

Díky.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<time.h>
#include<math.h>

int main()
{
	
	srand( (unsigned) time(NULL));
	
FILE *f1,*f2;
	
	f1 = fopen("vstup.txt","r");
	
	
	
	if(f1==NULL){printf("soubor se nepodarilo otevrit");
				getch();
				exit(1);}
	
	
double m,n;

fscanf(f1,"%lf",&m);

int znak1;

znak1=getc(f1);

fscanf(f1,"%lf",&n);

int znak2;

znak2=getc(f1);

fclose(f1);

if (m==NULL){printf("Spatna hodnota sloupce ci radku matice!!!");
			getch();
			exit(1);}
if (n==NULL){printf("spatna hodnota sloupce ci radku matice!!!");
			getch();
			exit(1);}			

printf("m=%lf \n",m);
printf("n=%lf \n",n);


int i,j;

int index_i,index_j;

double ** xd;

xd = (double **) malloc(m*sizeof(double*));
 
for(i=0;i<m;i++) xd[i] = (double *) malloc(n*sizeof(double) );

for(i=0;i<m;i++)
	for(j=0;j<n;j++)
	
		xd[i][j]=(i+j)*rand()%100;
		
printf("\n vypis matice \n\n");
for(i=0;i<m;i++)
{
	for(j=0;j<n;j++)
		printf("xd[%d][%d]=%4.1lf ",i,j,xd[i][j]);

	printf("\n");
}

for(i=0;i<m	;i++) free(xd[i]);

free(xd);

  int l,k,prvocislo;

  /* Hledame prvocisla */
  
for(i=0;i<n;i++)
	for(j=0;j<m;j++)
	{
  for(l = xd[i][j]; l <= xd[i][j]; l++)
  
    prvocislo = 1;

    for(k = 2; k <= i/2; k++)
      if (l%k == 0)
	  {
        prvocislo = 0;
        break;
      }


    if (prvocislo=1) 
fprintf(f2,"%lf",l);

fclose(f2);

printf("\n prvocisla vypsana v prvocisla.txt \n\n");
}


getch();
return 0;

}
Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
5. 5. 2020   #2
-
0
-

Z toho by vznikl pekelne dlouhej seznam.

- odsazovani - kompilator to zchroupe, ale cist to mame my...

- jako bys neznal jiny datovy typ nez double (s plovouci desetinnou carkou). Jaka je sance, ze budes mit rozmery matice treba 5.15878 x 8.5

- cimz se dostaneme k  if (m==NULL) a if (n==NULL) - jaky to ma smysl? Ani m, ani n neni pointer. Krom toho srovnavat double s nejakym cislem je taky spis o nahode, jelikoz to nemusi byt uplne presne nula. Kdyz uz budou rozmery spravneho typu, tak stejne dava smysl mit jen vetsi nez 0 (zadat se da jeste take zaporne cislo)

- vyplnovani nahodnymi cisly:  xd[i][j]=(i+j)*rand()%100;  - proc to nasobis i+j? Bude sakra nahoda, kdyz ti tam vyleze prvocislo. Vlastne jen kdyz bude i+j == 1 a rand nahodou vyjde prvocislo (nebo bude take 1 a pak muze byt i+j nahodou prvocislo)

- kousek pote uvolnujes vsechny ty alokovane pole a pak je dal pouzivas

- jak ze to vubec testujes to prvocislo?

- co ma sakra znamenat tohle?:  for(l = xd[i][j]; l <= xd[i][j]; l++) , rovnou prece dej:   l = xd[i][j];

- for(k = 2; k <= i/2; k++)  - proc sakra porovnavas k s polovinou indexu v poli? Kdyz uz, tak s l ne s i... Taky se to da trochu zrychlit podminkou    k*k <= l

- fclose(f2); Nikde nevidim fopen(f2, ...)
 

Mozna sem jeste neco prehledl, tohle je ve zkratce (hlavne to neodsazovani je priserny na cteni)

Nahlásit jako SPAM
IP: 78.80.31.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Lukáš
~ Anonymní uživatel
301 příspěvků
5. 5. 2020   #3
-
0
-

#2 KIIV

Díky moc!

Už je mi to všechno jasný. Solil jsem tam zbytečný kraviny, byl to můj první kód co jsem dělal sám. S tím odsazením budu muset začít něco dělat. Fakt moc děkuju.

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV
~ Moderátor
+43
God of flame
5. 5. 2020   #4
-
0
-

Jo double u prvocisel taky nedava uplne smysl, melo by stacit pole intu.

Nahlásit jako SPAM
IP: 78.80.31.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 142 hostů

Podobná vlákna

Prvocisla — založil myky

Prvocisla v intervalu — založil zemlra

Kod prvocisla — založil robin

Prvočísla -Pascal — založil El97za

Hledani prvocisla — založil loleklel

Moderátoři diskuze

 

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