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

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

 

Příspěvky odeslané z IP adresy 2001:718:7:204:306e:f066:...–

Tony
C / C++ › Permutance reteczu podle abe…
12. 5. 2012   #157888

Tady je zadani:

Vstupní řetezec "ab"

---Vysledky---
Delka retezce: 2
Vstupni retezec: "ab"
Serazeno: "ab"
Pocet permutaci: 2
"ab"
"ba"

Vstupní řetezec "abc"

---Vysledky---
Delka retezce: 3
Vstupni retezec: "abc"
Serazeno: "abc"
Pocet permutaci: 6
"abc"
"acb"
"bac"
"bca"
"cab"
"cba"

Vstupní řetezec "aa"

---Vysledky---
Delka retezce: 2
Vstupni retezec: "aa"
Serazeno: "aa"
Pocet permutaci: 2
"aa"
"aa"

Vstupní řetezec "abb"

---Vysledky---
Delka retezce: 3
Vstupni retezec: "abb"
Serazeno: "abb"
Pocet permutaci: 6
"abb"
"abb"
"bab"
"bab"
"bba"
"bba"

Tony
C / C++ › Permutance reteczu podle abe…
12. 5. 2012   #157886

ta prvni metoda sort je pouzivan jen pro sort vystupni retezec.... metoda sort pro pole jsem jeste nemel.

Tony
C / C++ › Permutance reteczu podle abe…
12. 5. 2012   #157881

Ahoj, potřebuji pomoc s razeni retezcu podle abeceda, vsechno uz mam hotove, akorat to razeni tech retezcu z pole nemuzu delat, nevim kde je vlastne chyba, je to tu nekdo ochotny se podivat do kodu anebo vyresit za me?

moje zadani je že ze vstupu mám načitat retezec, pak seradit do abeceda ( retezec "adcb" -> "abcd") pak vypocitam pocet permutance a vypsat, tohle ja mam ale treba kdyz mam retezec ABCD anebo AABB, BBAA tak ten program uz nevypise spravne, chtel jsem dat ty stringy do pole pak pomoci strcmp/memcmp rezadit postupne.

Třeba permutace AAB = Nromalni permutace AAB, ABA, AAB, ABA, BAA, BAA = Podle abeceda AAB, AAB, ABA, ABA, BAA, BAA

chyba je v metode rezeni();

Děkuji mockrat

/* 
 * File:   DU3.c
 * Author: trandtha
 *
 * Created on April 25, 2012, 2:48 PM
 */

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


int faktorial(int);
void vypis(char);
void volejVypis(char*, int, int);
void perm(char*, int, int);
void sort(char*);
void print(char*, int*, int);
void ulozDoPolechar(char*);
void sezareni();

char *pole[10000];
char *pole2[10000];
int count = 0;
int delkaText = 0;
int delkaPerm = 0;
int main(int argc, char** argv) {

        char *text, temp; 
		text = malloc(1024 * sizeof (char));
        int delka, i, delka2, delka3;
		long long pocetPermutace = 1;
        
        if (text != NULL) {          
            scanf("%s", text);          
             
            delka = strlen(text);
            printf("---Vysledky---\n");  
            printf("Delka retezce: %d\n", delka);
            
            printf("Vstupni retezec: \"%s\"\n", text);
                        
			sort(text);
			printf("Serazeno: \"%s\"\n", text);
			
            delka2 = strlen(text);
			printf("Pocet permutaci: %d", faktorial(delka2));
			delkaPerm = faktorial(delka2);
			delkaText = delka2;
			perm(text, 0, delka2);
			sezareni();
			//permutace(text, delka2);
			//int v[] = {1, 2, 3};
			//permute(text, v, 0, sizeof(v)/sizeof(int));
			
        } else {
            printf("CHYBA!!!");
        }

    
    

	system("pause");
	return 0;
}
void sezareni(){
	 char word1[delkaText];
	 int i, y, k, a;

	 for(k = 0; k < delkaPerm; k++){
		 for(i = 0; i < delkaPerm; i++){
		 	   for(y = 1; y < delkaPerm; y++){
					if((memcmp(pole[i], pole[y], delkaText) < 0)){
						//printf("pole y   \n\"%s\"", &pole[y]);
						//printf("pole y   \n\"%s\"", &pole[i]);
						strcpy(word1, &pole[i]);
						strcpy(&pole[i], &pole[y]);
						strcpy(&pole[y], word1);
					}
				}
		}	
}

 		for(i = 0; i < delkaPerm; i++){
	 strcpy(word1, pole[a]);
		printf("\n\"%s\"", &word1);
 		 	  }
 		 	  
}


void ulozDoPole(char *text){
	 int word[delkaText];
	strcpy( &pole[count], text );
	printf("\n\"%s\"", &pole[count]);
	count = count+1;
}

void perm(char *text, int k, int n){

	char t, d[10], s;
	int i;
	if(k == n){
		 ulozDoPole(text);
		//
		//printf("\n\"%s\"", text);
		return;
	}else {
		for(i = k; i < n; i++)
		{
		  t = text[i];
		  text[i] = text[k];
		  text[k] = t;
		  strcpy(d, text);
		  perm(d, k + 1, n);
		}
	}
}




int faktorial(int index){
	int i;
	long long result = 1;
	for(i = 1; i < index+1; i++){
		  result = result * (index+1-i);
	}
	return result;
}

void sort(char*text){	 
	 
        int i,j, delka;   
		char temp;     
		
            delka = strlen(text);
			            
		    for (i=0; i<delka-1; i++)
		    {
		        for (j=i+1; j<delka; j++)
		        {
		            if (text[i] > text[j])
		            {
		                temp = text[i];
		                text[i] = text[j];
		                text[j] = temp;
		            }
		        }
		    }
	 }

 

 

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