All pastes #454046 Raw Edit

Something

public c v1 · immutable
·published 2007-04-23 11:32 UTC
rendered paste body
/*izveidot divizmera dinamisko masivu kura elementi ir short int tipa.nepiecieshams:+ laut ievadit masiva elementus,+ mainit ta rindu garumus un elementus rindas+ izvadit pirmskaitlu skaitu rindas*/#include <stdlib.h>#include <stdio.h>#include <conio.h>	// DOS API, not portableint main() {  int input     = 0,	// ievades buferis      autofill  = 1, 	// automatiska aizpilde      exit 	= 0,	// vai beigt? [1 == nekad neatkartot]      cnt, cnt2, cnt3;	// skaititaji  short** root;                        // koka sakne  root    = calloc(1, sizeof(short*)); // stobrs  root[0] = calloc(1, sizeof(short )); // pirmais (dienesta) zars - masiva garums  do {	// galvenais cikls    clrscr();	// DOS API    printf("-=-=-=-=-=-=-=-=-=-=-=-\n");    for (cnt = 1; cnt <= root[0][0]; cnt++) {	// cikls zaru izvadei      printf("-%d- [%d] ", cnt, root[cnt][0]);	// zara numurs      for (cnt2 = 1; cnt2 <= root[cnt][0]; cnt2++) // cikls ciparu izvadei	printf(" %d", root[cnt][cnt2]);      printf("\n");    }    printf("-----------------------\n");	// pamaciba    printf(" 0 - izmainit X ass garumu\n \[n] - izmainit n-tas Y ass garumu\n \-1 - iziet\n \-2 - automatisks ievades rezhims\n \-3 - manuals ievades rezhims\n \-4 - pirmskaitlu skaits rindas\n \  Izvele: ");    scanf("%d", &input);			// izvelne    switch (input) {	// ievades apstrade      case 0:	// zaru skaits	printf("Ievadiet jaunu rindu skaitu: "); scanf("%d", &input);	if (input >= 0) {	  for (cnt = root[0][0]; cnt >= input + 1; cnt--) free(root[cnt]);	  // atbrivot zarus, kas nebus aizsniedzami pec zaru skaita mainas	  root = realloc(root, sizeof(short*) * (input+1));	  for (cnt = root[0][0]+1; cnt <= input; cnt++) root[cnt] = calloc(1, sizeof(short));	  // izveidot jaunus zarus	  root[0][0] = input;	// saglabat jaunu zaru skaitu	} else {	  printf("Rindu skaits nevar but mazaks par 0\n"); getch();	// DOS API	}	break;      case -1:	// izeja	exit++;	break;      case -2:	autofill = 1;	printf("Automatiska skaitlu ievade IESLEGTA\n");	break;      case -3:	autofill = 0;	printf("Automatiska skaitlu ievade IZSLEGTA\n");	break;      case -4:	printf("Pirmskaitli: \n");	for (cnt = 1; cnt <= root[0][0]; cnt++) {	// cikls zaru izvadei	  printf("-%d- ", cnt);	  cnt3 = root[cnt][0];	// pirmskaitlu skaits zara	  for (cnt2 = 1; cnt2 <= root[cnt][0]; cnt2++) {  // cikls skaitliem//	    if ((root[cnt][cnt2] == 1) || (root[cnt][cnt2] == 2)) {//	      cnt3--;//	      printf("%d ", root[cnt][cnt2]);//	      break;//	    } else {	      for (input = 2; input < root[cnt][cnt2]; input++) {	// meklet dalitajus		if (!(root[cnt][cnt2] % input)) {	// ja tiek atrasts nepirmskaitlis		  cnt3--;		// samazinat pirmskaitlu skaitu		  break;	// ne turpinat mekleshanu		}	      }	      if ((input >= root[cnt][cnt2] - 1) || (root[cnt][cnt2] == 1) || (root[cnt][cnt2] == 2)) // ja ir pirmskaitlis		printf("%d ", root[cnt][cnt2]);//	    }	  }	  printf(":: %d pirmskaitli\n", cnt3);	}	getch();	break;      default:	// zara lapu skaita izmaina	if ((input > 0) && (input <= root[0][0])) { // ievades parbaude		printf("Ievadiet jaunu skaitlu skaitu: ");		cnt = -1;		while (cnt < 0) {			scanf("%d", &cnt);			if (cnt < 0)				printf("Skaitlu skaits nevar but mazaks par 0\n");		}		root[input] = realloc(root[input], sizeof(short) * cnt+1);	// izmainit zara garumu		cnt3 = root[input][0]; //saglabat iepriekshejo skaitlu skaitu		root[input][0] = cnt;						// saglabat jaunu zara garumu		printf("Vadit skaitlus no jauna? (1/0) "); scanf("%d", &cnt2);		if (cnt2) cnt3 = 1;		for (cnt = cnt3+1; cnt <= root[input][0]; cnt++)			// iteracija pa zara lapam		  if (autofill)		    root[input][cnt] = rand() % 127;				// automatiska aizpilde		  else {			printf("%d-as rindas %ds elements: ", input, cnt); 		// manuala ievade			do {//				flushall();				scanf("%d", &cnt2);//				flushall();				if (cnt2 < 0)					printf("Skaitlis nevar but mazaks par 0\n");			} while (cnt2 < 0);		    root[input][cnt] = cnt2;		  }	} else {		printf("Nepareizs rindas numurs\n");		getch();     //	DOS API	}    }  } while (!exit);	// atkartot darbibas kamer exit <= 0  for (cnt = root[0][0]; cnt >= 0; cnt--)	// pie izejas atbrivot zarus...    free(root[cnt]);  free(root);		// ...un stobru  return EXIT_SUCCESS;}