Estrutura de Dados - Módulo I: Strings, Vetores e Matrizes

Prof. William Mendes

Manipulação de Strings

O que são Strings?

Cadeias de caracteres (strings) são sequências de caracteres que representam texto. Em muitas linguagens, são implementadas como arrays de caracteres.

Operações Fundamentais

Concatenação

Juntar duas ou mais strings em uma única string.

Extração

Obter uma parte específica de uma string (substring).

Busca

Encontrar a posição de um caractere ou substring.

Substituição

Trocar caracteres ou substrings por outros valores.

Aplicações Práticas

  • Processamento de texto
  • Compiladores
  • Desenvolvimento web
  • Busca e indexação

Desafios Comuns

Estouro de Buffer: Quando uma string excede o tamanho alocado.

Eficiência: Operações com strings grandes podem ser custosas.

Simulador de Strings

Exemplos de Código (Strings)

algoritmo "ManipulacaoStrings"
var
    nome: cadeia
    sobrenome: cadeia
    nomeCompleto: cadeia
inicio
    escreva("Digite o nome: ")
    leia(nome)
    escreva("Digite o sobrenome: ")
    leia(sobrenome)
    
    // Concatenação
    nomeCompleto <- nome + " " + sobrenome
    escreva("Nome completo: ", nomeCompleto)
    
    // Tamanho da string
    escreva("Tamanho: ", compr(nomeCompleto))
fimalgoritmo
# Manipulação de Strings em Python
nome = input("Digite o nome: ")
sobrenome = input("Digite o sobrenome: ")

# Concatenação
nome_completo = nome + " " + sobrenome
print(f"Nome completo: {nome_completo}")

# Tamanho da string
print(f"Tamanho: {len(nome_completo)}")

# Operações úteis
print(f"Maiúsculo: {nome_completo.upper()}")
print(f"Minúsculo: {nome_completo.lower()}")
print(f"Primeira letra maiúscula: {nome_completo.title()}")
// Manipulação de Strings em Java
import java.util.Scanner;

public class ManipulacaoStrings {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.print("Digite o nome: ");
        String nome = scanner.nextLine();
        
        System.out.print("Digite o sobrenome: ");
        String sobrenome = scanner.nextLine();
        
        // Concatenação
        String nomeCompleto = nome + " " + sobrenome;
        System.out.println("Nome completo: " + nomeCompleto);
        
        // Tamanho da string
        System.out.println("Tamanho: " + nomeCompleto.length());
        
        // Operações úteis
        System.out.println("Maiúsculo: " + nomeCompleto.toUpperCase());
        System.out.println("Minúsculo: " + nomeCompleto.toLowerCase());
    }
}
// Manipulação de Strings em C
#include <stdio.h>
#include <string.h>

int main() {
    char nome[50];
    char sobrenome[50];
    char nomeCompleto[100];
    
    printf("Digite o nome: ");
    scanf("%s", nome);
    
    printf("Digite o sobrenome: ");
    scanf("%s", sobrenome);
    
    // Concatenação
    strcpy(nomeCompleto, nome);
    strcat(nomeCompleto, " ");
    strcat(nomeCompleto, sobrenome);
    
    printf("Nome completo: %s\n", nomeCompleto);
    printf("Tamanho: %lu\n", strlen(nomeCompleto));
    
    return 0;
}

🎮 Playground Interativo - Strings

Vetores

O que são Vetores?

Vetores (arrays unidimensionais) são estruturas que armazenam elementos do mesmo tipo em posições de memória contíguas, acessados por índices numéricos.

85
92
78
95
88
01234

Características

Homogeneidade

Todos os elementos são do mesmo tipo

Tamanho Fixo

Definido na declaração

Acesso Direto

Complexidade O(1)

Índices

De 0 a n-1

Operações Comuns

  • Inserção: Adicionar elementos
  • Busca: Encontrar elementos
  • Remoção: Excluir elementos
  • Ordenação: Organizar elementos

Aplicações

Tabelas Listas Estatísticas Imagens

Limitações

Tamanho Fixo: Difícil redimensionar

Inserções/Remoções: Custosas no meio do vetor

Simulador de Vetores

Exemplos de Código (Vetores)

algoritmo "ManipulacaoVetores"
var
    notas: vetor[0..4] de real
    soma: real
    i: inteiro
inicio
    // Lendo as notas (índices de 0 a 4)
    para i de 0 ate 4 faca
        escreva("Digite a nota do índice ", i, ": ")
        leia(notas[i])
    fimpara
    
    // Calculando a soma
    soma <- 0
    para i de 0 ate 4 faca
        soma <- soma + notas[i]
    fimpara
    
    escreva("Média: ", soma/5)
    
    // Mostrando elementos com seus índices
    para i de 0 ate 4 faca
        escreva("notas[", i, "] = ", notas[i])
    fimpara
fimalgoritmo
# Manipulação de Vetores em Python
notas = []

# Lendo as notas
for i in range(5):
    nota = float(input(f"Digite a nota {i+1}: "))
    notas.append(nota)

# Calculando estatísticas
media = sum(notas) / len(notas)
maior_nota = max(notas)
menor_nota = min(notas)

print(f"Notas: {notas}")
print(f"Média: {media:.2f}")
print(f"Maior nota: {maior_nota}")
print(f"Menor nota: {menor_nota}")

# Ordenando as notas
notas_ordenadas = sorted(notas)
print(f"Notas ordenadas: {notas_ordenadas}")
// Manipulação de Vetores em Java
import java.util.Scanner;
import java.util.Arrays;

public class ManipulacaoVetores {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double[] notas = new double[5];
        double soma = 0;
        
        // Lendo as notas
        for (int i = 0; i < 5; i++) {
            System.out.print("Digite a nota " + (i+1) + ": ");
            notas[i] = scanner.nextDouble();
            soma += notas[i];
        }
        
        // Calculando estatísticas
        double media = soma / notas.length;
        double maiorNota = Arrays.stream(notas).max().orElse(0);
        double menorNota = Arrays.stream(notas).min().orElse(0);
        
        System.out.println("Notas: " + Arrays.toString(notas));
        System.out.printf("Média: %.2f%n", media);
        System.out.println("Maior nota: " + maiorNota);
        System.out.println("Menor nota: " + menorNota);
        
        // Ordenando as notas
        Arrays.sort(notas);
        System.out.println("Notas ordenadas: " + Arrays.toString(notas));
    }
}
// Manipulação de Vetores em C
#include <stdio.h>

int main() {
    float notas[5];
    float soma = 0;
    float maior, menor;
    int i;
    
    // Lendo as notas
    for (i = 0; i < 5; i++) {
        printf("Digite a nota %d: ", i+1);
        scanf("%f", ¬as[i]);
        soma += notas[i];
    }
    
    // Encontrando maior e menor
    maior = menor = notas[0];
    for (i = 1; i < 5; i++) {
        if (notas[i] > maior) maior = notas[i];
        if (notas[i] < menor) menor = notas[i];
    }
    
    // Exibindo resultados
    printf("Média: %.2f\n", soma/5);
    printf("Maior nota: %.2f\n", maior);
    printf("Menor nota: %.2f\n", menor);
    
    return 0;
}

🎮 Playground Interativo - Vetores

[10, 20, 30, 40, 50]

Matrizes

O que são Matrizes?

Matrizes (arrays bidimensionais) são estruturas que organizam dados em linhas e colunas, formando uma tabela. São acessadas por dois índices: linha e coluna.

X
O
X
O
X
O
X
O
X

Características

Bidimensional

Organizada em linhas e colunas

Homogeneidade

Todos os elementos do mesmo tipo

Acesso

matriz[i][j]

Tamanho Fixo

Definido na declaração

Operações Comuns

  • Percorrer: Usar loops aninhados
  • Buscar: Encontrar elementos específicos
  • Somar: Calcular soma de linhas/colunas
  • Transpor: Trocar linhas por colunas

Aplicações

Jogos Imagens Planilhas Gráficos Matemática

Exemplo Prático

Jogo da Velha: Uma matriz 3x3 pode representar o tabuleiro, onde cada posição armazena 'X', 'O' ou espaço vazio.

Simulador de Matrizes

Exemplos de Código (Matrizes)

algoritmo "ManipulacaoMatrizes"
var
    matriz: vetor[0..2, 0..2] de inteiro
    i, j: inteiro
    soma: inteiro
inicio
    // Preenchendo a matriz (índices de 0 a 2)
    para i de 0 ate 2 faca
        para j de 0 ate 2 faca
            escreva("Digite o elemento [", i, "][", j, "]: ")
            leia(matriz[i, j])
        fimpara
    fimpara
    
    // Calculando a soma total
    soma <- 0
    para i de 0 ate 2 faca
        para j de 0 ate 2 faca
            soma <- soma + matriz[i, j]
        fimpara
    fimpara
    
    escreva("Soma total: ", soma)
    
    // Mostrando elementos com seus índices
    para i de 0 ate 2 faca
        para j de 0 ate 2 faca
            escreva("matriz[", i, "][", j, "] = ", matriz[i, j])
        fimpara
    fimpara
fimalgoritmo
# Manipulação de Matrizes em Python
import numpy as np

# Criando uma matriz 3x3
matriz = []
print("Digite os elementos da matriz 3x3:")
for i in range(3):
    linha = []
    for j in range(3):
        elemento = int(input(f"Elemento [{i}][{j}]: "))
        linha.append(elemento)
    matriz.append(linha)

# Exibindo a matriz
print("\nMatriz:")
for linha in matriz:
    print(linha)

# Calculando estatísticas
soma_total = sum(sum(linha) for linha in matriz)
print(f"\nSoma total: {soma_total}")

# Soma das linhas
for i, linha in enumerate(matriz):
    print(f"Soma da linha {i}: {sum(linha)}")

# Soma das colunas
for j in range(3):
    soma_coluna = sum(matriz[i][j] for i in range(3))
    print(f"Soma da coluna {j}: {soma_coluna}")

# Diagonal principal
diagonal = [matriz[i][i] for i in range(3)]
print(f"Diagonal principal: {diagonal}")
print(f"Soma da diagonal: {sum(diagonal)}")
// Manipulação de Matrizes em Java
import java.util.Scanner;

public class ManipulacaoMatrizes {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[][] matriz = new int[3][3];
        int somaTotal = 0;
        
        // Preenchendo a matriz
        System.out.println("Digite os elementos da matriz 3x3:");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print("Elemento [" + i + "][" + j + "]: ");
                matriz[i][j] = scanner.nextInt();
                somaTotal += matriz[i][j];
            }
        }
        
        // Exibindo a matriz
        System.out.println("\nMatriz:");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(matriz[i][j] + " ");
            }
            System.out.println();
        }
        
        System.out.println("Soma total: " + somaTotal);
        
        // Soma das linhas
        for (int i = 0; i < 3; i++) {
            int somaLinha = 0;
            for (int j = 0; j < 3; j++) {
                somaLinha += matriz[i][j];
            }
            System.out.println("Soma da linha " + i + ": " + somaLinha);
        }
        
        // Soma das colunas
        for (int j = 0; j < 3; j++) {
            int somaColuna = 0;
            for (int i = 0; i < 3; i++) {
                somaColuna += matriz[i][j];
            }
            System.out.println("Soma da coluna " + j + ": " + somaColuna);
        }
        
        // Diagonal principal
        int somaDiagonal = 0;
        for (int i = 0; i < 3; i++) {
            somaDiagonal += matriz[i][i];
        }
        System.out.println("Soma da diagonal principal: " + somaDiagonal);
    }
}
// Manipulação de Matrizes em C
#include <stdio.h>

int main() {
    int matriz[3][3];
    int i, j;
    int somaTotal = 0;
    
    // Preenchendo a matriz
    printf("Digite os elementos da matriz 3x3:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("Elemento [%d][%d]: ", i, j);
            scanf("%d", &matriz[i][j]);
            somaTotal += matriz[i][j];
        }
    }
    
    // Exibindo a matriz
    printf("\nMatriz:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }
    
    printf("Soma total: %d\n", somaTotal);
    
    // Soma das linhas
    for (i = 0; i < 3; i++) {
        int somaLinha = 0;
        for (j = 0; j < 3; j++) {
            somaLinha += matriz[i][j];
        }
        printf("Soma da linha %d: %d\n", i, somaLinha);
    }
    
    // Soma das colunas
    for (j = 0; j < 3; j++) {
        int somaColuna = 0;
        for (i = 0; i < 3; i++) {
            somaColuna += matriz[i][j];
        }
        printf("Soma da coluna %d: %d\n", j, somaColuna);
    }
    
    // Diagonal principal
    int somaDiagonal = 0;
    for (i = 0; i < 3; i++) {
        somaDiagonal += matriz[i][i];
    }
    printf("Soma da diagonal principal: %d\n", somaDiagonal);
    
    return 0;
}

🎮 Playground Interativo - Matrizes

Desafio do Módulo I - Exemplo Prático: Sistema de Notas

Baseado no desafio do curso, aqui está um sistema simplificado para cadastro de alunos e notas: