PlayMa256 Posted June 16, 2013 at 05:24 PM Report #513261 Posted June 16, 2013 at 05:24 PM (edited) bom, estou a percorrer uma matriz, a qual possui dados tanto int quanto strings. Bom, percorro de uma maneira, se eu achar por exemplo um =A1, quer dizer que preciso colocar no lugar desse A1 o que esta na posiçao A1 da minha matris(linha0, coluna0). fiz desta maneira: if(strcmp(matris[i][c], "=A1") == 0){ strcpy(matris[i][c], matris[0][0]); } if(strcmp(matris[i][c], "=C1") == 0){ strcpy(matris[i][c], matris[2][0]); } preciso fazer isso com tooooooodas as letras do alfabeto, e com todoas as colunas, A2, B2..... Bom, cheguei a uma barreira, quando eu tenho na celula que ele aponta, um dado do tipo int, ele nao funciona essa copia que estou tentando fazer. De que maneira poderia sobrepor esse =A1 pelo dado int que tem na posiçao que ele esta? Obrigado. Edited June 16, 2013 at 05:29 PM by PlayMa256
Rui Carlos Posted June 16, 2013 at 06:16 PM Report #513264 Posted June 16, 2013 at 06:16 PM Queres copiar um inteiro para uma matriz de strings? Se for isso, só precisas de converter o inteiro para string, usando, por exemplo, o sprintf. Rui Carlos Gonçalves
PlayMa256 Posted June 16, 2013 at 06:57 PM Author Report #513271 Posted June 16, 2013 at 06:57 PM só uma duvida, ele mantem o conteudo inteiro depois la na matris de char? por exemplo 21 ele mantem 21 na hora de printar? Nem precisei utilizar, acabou que era problema na seleção das colunas mesmo... Suponhamos que em uma celula eu tenha =A1+A2+A3, eu fiz a maneira pra substituir cada elemento pelo correspondente usando esses ifs, mas agora neste caso, se eu pedir pra substituir ele vai achar o A1, e vai simplesmente substituir tudo dessa celula pelo que tem na A1, como poderia fazer pra ele substituir o valor correspondente, e ainda fazer as operações com ele? Obrigado.
HappyHippyHippo Posted June 17, 2013 at 04:03 AM Report #513295 Posted June 17, 2013 at 04:03 AM tu nunca deverias alterar o conteúdo de uma célula. deverias guardar o resultado da avaliação do conteúdo da célula num outro local. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 12:56 PM Author Report #513358 Posted June 17, 2013 at 12:56 PM Percorro caractere por caractere, vejo se é A, vejo se i+1 é 1 guardo o valor, vejo se o próximo é +-*, ai faço com uma vvariável tmp certo? Tem uma maneira mais fácil de fazer do que ficar comparando se é A B C, 1 2 3.? Obrigado
HappyHippyHippo Posted June 17, 2013 at 01:13 PM Report #513361 Posted June 17, 2013 at 01:13 PM if (sscanf(&conteudo[pos], "%c%d", coluna, linha) == 2) { // leu correctamente o caracter da coluna e o caracter da linha } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 01:37 PM Author Report #513364 Posted June 17, 2013 at 01:37 PM a funcao sscanf retorna o que? E porque == 2? Só isso que nao entendi Outra coisa, tentei colocar a celula da minha matris, (matris[l][c]) como primeiro argumento pra extração dos dados, mas ele pediu um pointer, ta certo isso?
HappyHippyHippo Posted June 17, 2013 at 01:44 PM Report #513369 Posted June 17, 2013 at 01:44 PM o primeiro elemento do sscanf é a string que será lida a função retorna o número de elementos lidos correspondentes do formato dado. como disse para ler dois elementos (coluna e linha), a função só leu correctamente se o valor de retorno for 2. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 01:50 PM Author Report #513370 Posted June 17, 2013 at 01:50 PM (edited) no meu caso a string que será lida esta dentro da celula, no caso [linha][coluna]. Passei matris[k][c], "%c%d", col, linha onde col e linha sao ponteiros (nao sei pq, mas pedia ponteiro). Agora, de qualquer maneira eu nao preciso tratar, pra saber se col é A, B, C ou D? e linha se é 1, 2, 3? E depois fazer a substituição da coluna linha referente, e armazena-lo em uma variavel temporaria para fazer as operações necessarias? Edited June 17, 2013 at 01:51 PM by PlayMa256
HappyHippyHippo Posted June 17, 2013 at 01:57 PM Report #513371 Posted June 17, 2013 at 01:57 PM char coluna; int linha; if (sscanf(&conteudo[pos], "%c%d", &coluna, &linha) == 2) { // tens a certeza que leu um caracter para a variável "coluna" e num número para a variável "linha" // só tens de verificar se a combinação coluna/linha existe na tua matrix } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 02:06 PM Author Report #513372 Posted June 17, 2013 at 02:06 PM uhm, esqueçi do & mesmo. Para verificar a combinação de linha e coluna, como estao em numeros, de qualquer maneira eu nao precisaria fazer uma verificação do tipo: if((col == 'A') && (linha == 1)){ temp = matris[0][0] } . . . Nao? ou estou a pensar de uma maneira mais confusa e trabalhosa?
HappyHippyHippo Posted June 17, 2013 at 02:09 PM Report #513373 Posted June 17, 2013 at 02:09 PM char col; int lin; // ... printf("o valor da celula %c%d : %s", col, lin, matrix[col - 'A'][lin]); agora adapta aos limites/existẽncia da tua matrix IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 02:22 PM Author Report #513376 Posted June 17, 2013 at 02:22 PM [col - 'A'] é possivel fazer isso? Col - A? nao entendi isso.
HappyHippyHippo Posted June 17, 2013 at 02:34 PM Report #513379 Posted June 17, 2013 at 02:34 PM (edited) o tipo de dados char não deixa de ser um número (de -128 a 127), assim como 'A' não deixa de ser um número. para saber os vares reais dos caracteres podes ver qualquer ascii table char c; int i; i = c - 'A'; // se c == 'A' => i = 'A' - 'A' => i = 65 - 65 = 0 i = c - 'A'; // se c == 'B' => i = 'B' - 'A' => i = 66 - 65 = 1 i = c - 'A'; // se c == 'C' => i = 'C' - 'A' => i = 67 - 65 = 2 ... Edited June 17, 2013 at 02:34 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 03:06 PM Author Report #513390 Posted June 17, 2013 at 03:06 PM (edited) Uhm, essa parte entedi. Tentei fazer um dump, pra ver se estava pegando direitinho, eu insiro A1 la mando processar, nao aparece Nem linhas nem colunas. //inicializa as variaveis de controle int i,c; //inicializa as variaveis para o sscanf char col; int linha; //faz o for do numero de llinhas for(i=0;i<k;i++){ //faz o for do numero de colunas for(c=0;c<colunas;c++){ if (sscanf(matris[k][c], "%c%d", &col, &linha) == 2) { printf("linha: %d coluna: %c\n", linha, col); } } } eu percorro cada linha e cada coluna, e faço o sscanf em cada celula da matris, estranho isso.. Tem algum erro nisso? Obrigado. Edited June 17, 2013 at 03:22 PM by brunoais
HappyHippyHippo Posted June 17, 2013 at 03:50 PM Report #513401 Posted June 17, 2013 at 03:50 PM nenhuma das células da matrix começa com uma caracter seguido de um número IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 17, 2013 at 06:58 PM Author Report #513464 Posted June 17, 2013 at 06:58 PM (edited) nossa 😞 Eu como teste inseri: 1 2 3 4 5 A1 B1 C1 D1 E1 era pra ter retornado nao era? ja que a celula A2 começa com caractere e seguido de um numero... Edited June 17, 2013 at 06:58 PM by PlayMa256
HappyHippyHippo Posted June 17, 2013 at 07:41 PM Report #513471 Posted June 17, 2013 at 07:41 PM deverás ter erro no código ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PlayMa256 Posted June 18, 2013 at 01:15 AM Author Report #513520 Posted June 18, 2013 at 01:15 AM (edited) creio que nao, porque copei justamente o que postaste. //inicializa as variaveis de controle int i,c; //inicializa as variaveis para o sscanf char col; int linha; //faz o for do numero de llinhas for(i=0;i<k;i++){ //faz o for do numero de colunas for(c=0;c<colunas;c++){ if (sscanf(matris[k][c], "%c%d", &col, &linha) == 2) { printf("linha: %d coluna: %c\n", linha, col); } } } fiz desta maneira só pra fazer um dump, pra ver se estava dando certo, mas nada =/ Edited June 18, 2013 at 01:16 AM by PlayMa256
HappyHippyHippo Posted June 18, 2013 at 04:32 AM Report #513523 Posted June 18, 2013 at 04:32 AM e desde quando que foi eu que fiz esses ciclos for ? olha bem para o código que tens IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now