Você está aqui: Cards de Engenharia Civil - Construção Civil |
||
|
||
|
|
||
Ruby ::: Dicas & Truques ::: Strings e Caracteres |
Como testar se uma string começa com uma determinada substring em Ruby usando uma função personalizadaQuantidade de visualizações: 7815 vezes |
|
O Ruby, até a versão 1.8.6, não dispõe de um método para verificar se uma string começa com uma determinada substring. Assim, veja abaixo como escrever uma função starts_with(). Esta função recebe a string e a substring e retorna true se a string começar com a substring. Eis a listagem completa:
# método auxiliar que permite verificar se
# uma string começa com uma substring
def starts_with(string, substring)
if string.index(substring) == 0
return true
else
return false
end
end
# declara e inicializa uma variável string
frase = "Gosto muito de Ruby"
# vamos verificar a string começa com "Gosto"
if starts_with(frase, "Gosto")
puts "A string começa com \"Gosto\""
else
puts "A string NÃO começa com \"Gosto\""
end
Ao executar este código Ruby nós teremos o seguinte resultado: A string começa com "Gosto" |
C++ ::: STL (Standard Template Library) ::: Vector C++ |
Como retornar uma referência ao último elemento de um vector C++ usando a função back()Quantidade de visualizações: 7320 vezes |
O último elemento de um contêiner STL vector pode ser acessado por meio da função back(). Como esta função é sobrecarregada, temos duas opções:reference back(); const_reference back() const;
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[]){
// um vector vazio que conterá inteiros
vector<int> valores;
// vamos inserir três elementos
valores.push_back(54);
valores.push_back(13);
valores.push_back(87);
// vamos obter o valor do último elemento do vector
// Note que back() pode ser usada dos dois lados
// de uma operação de atribuição
int valor = valores.back();
cout << "Último elemento: " << valor << endl;
// vamos alterar o valor do último elemento
valores.back() = 102;
// vamos testar o resultado
cout << "Último elemento: " << valores.back() << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
Ao executar este código C++ nós teremos o seguinte resultado: Último elemento: 87 Último elemento: 102 Note que aqui nós usamos: int valor = valores.back(); para guardar o valor do último elemento na variável valor. Poderíamos também usar: int& valor = valores.back(); valor = 102; Agora valor é uma referência direta ao último elemento do vector. Desta forma, qualquer alteração no valor da variável valor afetará também o último elemento do vector. Observe agora o seguinte trecho de código: int valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Aqui nós acessamos o valor do último elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.back(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 87. De fato, o que gostaríamos é que uma alteração em valores.back() afetasse também a variável valor. Assim: int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Mas, como evitar alterações diretas na variável valor? Podemos declarar valor como uma referência constante, ou seja, usar a segunda versão da função back(), a saber const T&, que retorna uma referência constante. Veja: const int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; valor = 300; // esta linha não compila cout << "Último elemento: " << valor << endl; Agora o efeito que queríamos é alcançado. Alterações em valores.back() afetam a variável valor, mas, não podemos alterar valor diretamente, já que esta variável é uma referência constante agora. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de Java - Como retornar o maior elemento em cada uma das colunas de uma matriz usando JavaQuantidade de visualizações: 1073 vezes |
|
Pergunta/Tarefa: Dada a seguinte matriz: 6 10 4 2 9 7 20 3 1 Sua saída deverá ser parecida com: Maior elemento na coluna 0 é 20 Maior elemento na coluna 1 é 10 Maior elemento na coluna 2 é 7 Veja a resolução comentada deste exercício usando Java:
package estudos;
public class Estudos {
public static void main(String[] args) {
// vamos declarar e constuir uma matriz de 3 linhas e três colunas
int matriz[][] = {{6, 10, 4}, {2, 9, 7}, {20, 3, 1}};
// vamos percorrer a matriz e exibir o maior elemento de cada coluna
// começamos com cada coluna
for(int i = 0; i < matriz[0].length; i++){
// assumimos que o maior valor é o primeiro dessa coluna
int maior = matriz[0][i];
// percorremos todos os elementos desta linha
for(int j = 0; j < matriz.length; j++){
// o elemento atual é maior que o maior?
if(matriz[j][i] > maior){
// maior assume o valor atual
maior = matriz[j][i];
}
}
// exibimos o maior elemento desta coluna
System.out.println("Maior elemento na coluna " + i + " é " + maior);
}
}
}
|
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar a propriedade Active da classe TClientDataSet do DelphiQuantidade de visualizações: 12236 vezes |
|
A propriedade Active de um controle TClientDataSet pode ser definida em tempo de design (pelo Object Inspector) ou em tempo de execução. Se o valor for True os dados armazenados no TClientDataSet podem ser lidos e manipulados. Se o valor for False, o client dataset está fechado (closed) e não podemos acessar nem manipular os dados contidos nele. Veja no trecho de código abaixo como definir o valor da propriedade Active em tempo de execução:
procedure TForm3.Button3Click(Sender: TObject);
begin
// vamos ativar o client dataset
ClientDataSet1.Active := True;
// vamos testar se o client dataset foi mesmo ativado
if ClientDataSet1.Active then
ShowMessage('O ClientDataSet está ativo')
else
ShowMessage('O ClientDataSet NÃO está ativo')
end;
Ao clicar no botão nós "ativamos" o client dataset e em seguida testamos o valor da propriedade Active para informar se o controle foi realmente ativado. É preciso ter muito cuidado. Tentar manipular os dados de um client dataset fechado pode resultar em uma exceção do tipo EDatabaseError com mensagens parecidas com: Project Projeto.exe raised exception class EDatabaseError with message 'ClientDataSet1: Cannot perform this operation on a closed dataset'. Ao definirmos o valor True para a propriedade Active as seguintes ações ocorrem: 1) O client dataset é preenchido com dados. Dependendo das propriedades do controle, estes dados podem vir de três formas diferentes: a) Do arquivo especificado na propriedade FileName; b) Do provider especificado na propriedade ProviderName ou por meio do método SetProvider. (algumas classes derivadas de TCustomClientDataSet possuem um componente interno que faz o papel do provider); c) Os dados que estavam ativos quando o client dataset foi desativado (somente se a aplicação foi executada durante um certo período depois que o dataset foi desativado). 2) O evento BeforeOpen é disparado. 3) O valor dsBrowse é atribuído à propriedade State do dataset. 4) Abre e posiciona um cursor no primeiro registro do conjunto de dados. 5) Dispara o evento AfterOpen. Se o client dataset nunca foi ativado, atribuir o valor True para a propriedade Active faz com que a estrutura (metadata) do client dataset seja definida. Esta estrutura é obtida juntamente com o pacote de dados a partir do provider ou armazenado em disco. Se não houver pacote de dados, tal estrutura é construída usando o valor atual da propriedade FieldDefs ou a partir dos componentes de campos persistentes listados na propriedade Fields. Se um erro ocorrer durante a abertura do dataset, seu estado (State) é definido como dsInactive e o cursor de navegação é fechado. Ao definirmos o valor False para a propriedade Active as seguintes ações ocorrem: 1) O evento BeforeClose é disparado. 2) O valor para a propriedade State é definido como dsInactive. 3) O cursor de navegação é fechado, salvando os dados atuais em disco se a propriedade FileName estiver definida e salvando o pacote de dados atual em cache de forma que o mesmo possa ser restaurado mais tarde quando o dataset for reaberto. 4) O evento AfterClose é disparado. Importante: Uma chamada ao método Open do TClientDataSet define a propriedade Active como True, enquanto uma chamada ao método Close a define como False. Esta dica foi escrita e testada no Delphi 2009. |
C++ ::: Dicas & Truques ::: Strings e Caracteres |
Como pesquisar uma substring em uma string C++ usando o método find() e retornar o índice do primeiro caractereQuantidade de visualizações: 10479 vezes |
|
Nesta dica mostrarei como podemos usar a função find() da classe String do C++ para pesquisar parte de uma palavra, frase ou texto. Se a substring for encontrada, o índice do seu primeiro caractere é retornado. Caso contrário o valor npos é retornado. Veja o código C++ completo para o exemplo:
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
// vamos criar uma string
string frase = "Gosto de Java e C++";
cout << "A string informada foi: " << frase << endl;
// agora vamos checar a existência da substring
size_t pos = frase.find("Java");
// a substring foi encontrada?
if(pos == string::npos){
cout << "A substring nao foi encontrada." << endl;
}
else{
cout << "A substring foi encontrada" <<
" no indice " << pos << endl;
}
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
Ao executar este código C++ nós teremos o seguinte resultado: A string informada foi: Gosto de Java e C++ A substring foi encontrada no indice 9 |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






