Permutance reteczu podle abeceda – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Permutance reteczu podle abeceda – C / C++ – Fórum – Programujte.comPermutance reteczu podle abeceda – C / C++ – Fórum – Programujte.com

 

Tony
~ Anonymní uživatel
9 příspěvků
12. 5. 2012   #1
-
0
-

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;
		            }
		        }
		    }
	 }

Nahlásit jako SPAM
IP: 2001:718:7:204:306e:f066:...–
ondra.holub+1
Stálý člen
12. 5. 2012   #2
-
0
-

Předpokládám, že chceš, aby funkce sort seřadila pole řetězců. Ale předáváš jí jenom jeden řetězec (bere typ char*). text[i] je v ní pak jenom jeden znak.

Nahlásit jako SPAM
IP: 85.207.23.–
Tony
~ Anonymní uživatel
9 příspěvků
12. 5. 2012   #3
-
0
-

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

Nahlásit jako SPAM
IP: 2001:718:7:204:306e:f066:...–
Tony
~ Anonymní uživatel
9 příspěvků
12. 5. 2012   #4
-
0
-

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"

Nahlásit jako SPAM
IP: 2001:718:7:204:306e:f066:...–
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, 7 hostů

Podobná vlákna

Abeceda — založil ches

Morseova abeceda — založil Pól Bulva

Morseova abeceda — založil hejnallukas

Morseova abeceda — založil Montezo

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ý