-
Posts
37 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por nigolino
-
-
-
Pessoal,
passei para uma nova fase, o erro anterior já foi sanado, agora apresentou outro erro:
erro: org.postgresql.util.PSQLException: ERROR: relation"pensionistas" does not exist
Posição: 13esta posição 13 será que é dentro da classe salvar? não parece ser uma linha...
-
34 minutos atrás, De Los Santos disse:
Os nomes dos campos "numFunc pensionista, numVinc pensionista, numPen pensionista, nome pensionista, salarioBase pensionista, email pensionista, dataNascim pensionista, banco pensionista, agencia pensionista e conta pensionista" estão corretos? Que eu saiba o Postgre não deixa criar campos com espaços no nome.
Perfeito, está errado aqui, está faltando o underline, vou testar à noite...e vai dar certo.
-
Estou tentando fazer a inserção de dados no banco de dados usando o netbeans mas está retornando um erro padrão, aparentemente está tudo correto, mas retorna sempre o erro:
Erro ao inserir dados, erro: org.postgresql.util.PSQLException: ERROR: syntax error at or near "Pensionista"
posição: 34posição: 34 suponho que seja nesta classe no: pst.setString(8, mod.getBanco()); já revisei o banco de dados para deixar exatamente igual, mas não insere os dados no BD.
public void Salvar(ModeloPensionista mod){ conex.conexao(); try { PreparedStatement pst = conex.con.prepareStatement("insert into Pensionistas(numFunc pensionista, numVinc pensionista, numPen pensionista, nome pensionista, salarioBase pensionista, email pensionista, dataNascim pensionista, banco pensionista, agencia pensionista, conta pensionista)values(?,?,?,?,?,?,?,?,?,?)"); pst.setInt(1, mod.getNumFunc()); pst.setInt(2, mod.getNumVinc()); pst.setInt(3, mod.getNumPen()); pst.setString(4, mod.getNome()); pst.setDouble(5, mod.getSalarioBase()); pst.setString(6, mod.getEmail()); pst.setString(7, mod.getDataNascim()); pst.setString(8, mod.getBanco()); pst.setInt(9, mod.getAgencia()); pst.setInt(10, mod.getConta()); pst.execute(); JOptionPane.showMessageDialog(null, "Dados Inseridos com Sucesso!!!"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro ao Inserir Dados!!!/nErro:"+ex); } conex.desconecta(); }
-
Pessoal, estou com mais uma dúvida com relação a conversão do ComboBoxBanco o netbeans retorna a mensagem "Objeto não pode ser convertido para String", tentei fazer o casting, mas está dando erro na execução, somente com a conta banco...o combo foi criado no banco de dados e no programa como int...
private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) { // Ação Salvar: mod.setNumFunc(Integer.parseInt(jTextFieldNumFunc.getText())); mod.setNumVinc(Integer.parseInt(jTextFieldNumVinc.getText())); mod.setNumPen(Integer.parseInt(jTextFieldNumPen.getText())); mod.setNome(jTextFieldNome.getText()); mod.setSalarioBase(Double.parseDouble(jTextFieldSalarioBase.getText())); mod.setEmail(jTextFieldEmail.getText()); mod.setDataNascim(jTextFieldDataNascim.getText()); //mod.setBanco((Integer)jComboBoxBanco.getSelectedItem()); mod.setBanco(Integer.parseInt(jComboBoxBanco.getSelectedItem())); //mod.setBanco((int) jComboBoxBanco.getSelectedItem()); mod.setAgencia(Integer.parseInt(jTextFieldAgencia.getText())); mod.setConta(Integer.parseInt(jTextFieldConta.getText())); control.Salvar(mod); }
-
12 minutos atrás, herbertbahia disse:
ué
desculpa aí, eu quis dizer que estava usando jdbc...e não springboot..
- 1
-
48 minutos atrás, herbertbahia disse:
depende a finalidade do seu sistema por exmeplo se for jdbc aqui esta um exemplo
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>herbert.company</groupId> <artifactId>jdbc-Jdev</artifactId> <version>0.0.1-SNAPSHOT</version> <name>jdbc-Jdev</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.16</version> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> </build> </project>
package conexaojdbc; import java.sql.Connection; import java.sql.DriverManager; public class SingleConection { private static String url= "jdbc:postgresql://localhost:5432/nomebanco"; private static String user = "postgres"; private static String password= "admin"; private static Connection connection = null; static { conectar(); } public SingleConection() { conectar(); } private static void conectar() { try { if(connection==null) { Class.forName("org.postgresql.Driver"); connection = DriverManager.getConnection(url, user, password); connection.setAutoCommit(false); System.out.println("Conectou com Sucesso"); } } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { return connection; } }
Estou tentando configurar o "pom", mas não estou conseguindo porque não estou usando o jdbc. Vou postar meus códigos para que possam ver...
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany</groupId> <artifactId>ProjetoClinica</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <name>ProjetoClinica</name> <repositories> <repository> <id>unknown-jars-temp-repo</id> <name>A temporary repository created by NetBeans for libraries and jars it could not identify. Please replace the dependencies in this repository with correct ones and delete this repository.</name> <url>file:${project.basedir}/lib</url> </repository> <repository> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>VERSION</version> </repository> </repositories> </project>
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package controle; import java.sql.*; import java.sql.DriverManager; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * * @author SCHRENK */ public class ConexaoBD { public Statement stm; //pesquisa no banco de dados public ResultSet rs; // armazena o resultado da pesquisa private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD private String caminho = "jdbc:postgresql://localhost:5433/Postgres"; //Qual o caminho do BD private String usuario = "postgres"; private String senha = "1234567"; public Connection con; public void conexao(){ try { System.setProperty("jdbc.DriverClassName", driver);//setar a propriedade do driver de conexão con=DriverManager.getConnection(caminho, usuario, senha); JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage()); } } public void desconecta(){ try { con.close(); JOptionPane.showMessageDialog(null, "Desconectado com sucesso"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro ao desconectar efetuada com sucesso"+ex.getMessage()); } } }
The project com.mycompany:ProjetoClinica:1.0-SNAPSHOT (C:\ProjetoClinica\pom.xml) has 4 errors Malformed POM C:\ProjetoClinica\pom.xml: Unrecognised tag: 'groupId' (position: START_TAG seen ...<repository>\n <groupId>... @22:22) @ C:\ProjetoClinica\pom.xml, line 22, column 22 -> [Help 2] 'repositories.repository.id' is missing. @ line 21, column 21 'repositories.repository.[null].url' is missing. @ line 21, column 21 Invalid artifact repository: Repository identifier missing -> [Help 3] To see the full stack trace of the errors, re-run Maven with the -e switch. Re-run Maven using the -X switch to enable full debug logging.
-
Boa tarde,
já configurei o path do jar, mas sobre "usando mavem é bom da uma conferida no pom também," o que devo configurar no pom?
-
3 horas atrás, bngomes disse:
Teste trocando jdbc.Drivers para jdbc.driverClassName e veja se conecta... nas minhas configurações é com essa propriedade..
Eu coloquei bem como você digitou e continua aparecendo a mesma mensagem...eu devo colocar um nome de classe no lugar de ClassName no jdbc.driver...? Será que eu não tenho um problema de biblioteca?
-
8 horas atrás, nigolino disse:
Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha
public class ConexaoBD { public Statement stn; //pesquisa no banco de dados public ResultSet rs; // armazena o resultado da pesquisa private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD private String usuario = "postgres"; private String senha = "xxxxxxx"; public Connection con; public void conexao(){ try { System.setProperty("jdbc.Drivers", driver); con=DriverManager.getConnection(caminho, usuario, senha); JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage()); } }
Moderador, ontem acabei inserindo a minha dúvida aqui no campo C, pode remove-lo daqui porque não estou conseguindo.
-
Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha
public class ConexaoBD { public Statement stn; //pesquisa no banco de dados public ResultSet rs; // armazena o resultado da pesquisa private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD private String usuario = "postgres"; private String senha = "xxxxxxx"; public Connection con; public void conexao(){ try { System.setProperty("jdbc.Drivers", driver); con=DriverManager.getConnection(caminho, usuario, senha); JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage()); } }
-
Fiz a conexão no banco de dados usando o netbeans mas não está encontrando o DRIVE, aparentemente está tudo correto, mas retorna sempre o erro: No suitable driver found for jdbc:postgresql:localhost:5432/ProjetoFolha
public class ConexaoBD { public Statement stn; //pesquisa no banco de dados public ResultSet rs; // armazena o resultado da pesquisa private String driver = "org.postgresql.Driver"; //identifica o nosso serviço BD private String caminho = "jdbc:postgresql://localhost:5432/ProjetoFolha"; //Qual o caminho do BD private String usuario = "postgres"; private String senha = "xxxxxxx"; public Connection con; public void conexao(){ try { System.setProperty("jdbc.Drivers", driver); con=DriverManager.getConnection(caminho, usuario, senha); JOptionPane.showMessageDialog(null, "Conexão efetuada com sucesso"); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Erro na conexão efetuada!\n"+ex.getMessage()); } }
-
Adriano, obrigado pela ajuda, vou postar as três classes do erro, talvez você consiga enxergar o que não vejo...
Caused by: java.lang.NullPointerException
at model.dao.impl.SellerDaoJDBC.update(SellerDaoJDBC.java:83)
at model.services.SellerService.saveOrUpdate(SellerService.java:22)
at gui.SellerFormController.onBtSaveAction(SellerFormController.java:128)
... 134 more@FXML public void onBtSaveAction(ActionEvent event) { // System.out.println("Ação do Botão Salvar!!!"); if (entity == null) { throw new IllegalStateException("Entity was null"); } if (service == null) { throw new IllegalStateException("Service was null"); } try { entity = getFormData();// pegar os dados da cx e instanciar um depto service.saveOrUpdate(entity); notifyDataChangeListeners(); Utils.currentStage(event).close(); } catch (ValidationException e) { setErrorMessages(e.getErros()); } catch (DbException e) { Alerts.showAlert("Error saving object", null, e.getMessage(), AlertType.ERROR); } }
package model.services; import java.util.List; import model.dao.DaoFactory; import model.dao.SellerDao; import model.entities.Seller; public class SellerService { private SellerDao dao = DaoFactory.createSellerDao(); public List<Seller> findAll(){ return dao.findAll(); } public void saveOrUpdate(Seller obj) { if(obj.getId() == null) { dao.insert(obj); } else { dao.update(obj); } }
@Override public void update(Seller obj) { PreparedStatement st = null; try { st = conn.prepareStatement( "UPDATE seller " + "SET Name = ?, NumFunc = ?, NumVinc = ?, NumPen = ?, Email = ?, BirthDate = ?, BaseSalary = ?, Banco = ?, Agencia = ?, Conta = ?, DepartmentId = ? " + "WHERE Id = ?"); st.setString(1, obj.getName()); st.setInt(2, obj.getNumFunc()); st.setInt(3, obj.getNumVinc()); st.setInt(4, obj.getNumPen()); st.setString(5, obj.getEmail()); st.setDate(6, new java.sql.Date(obj.getBirthDate().getTime())); st.setDouble(7, obj.getBaseSalary()); st.setInt(8, obj.getBanco()); st.setInt(9, obj.getAgencia()); st.setInt(10, obj.getConta()); st.setInt(11, obj.getDepartment().getId()); st.setInt(12, obj.getId()); st.executeUpdate(); } catch (SQLException e) { throw new DbException(e.getMessage()); } finally { DB.closeStatement(st); } }
package model.entities; import java.io.Serializable; import java.util.Date; public class Seller implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String name; private Integer numFunc; private Integer numVinc; private Integer numPen; private Double baseSalary; private Date birthDate; private String email; private Integer banco; private Integer agencia; private Integer conta; private Department department; public Seller() { } public Seller(Integer id, String name, Integer numFunc, Integer numVinc, Integer numPen, Double baseSalary, Date birthDate, String email, Integer banco, Integer agencia, Integer conta, Department department) { this.id = id; this.name = name; this.numFunc = numFunc; this.numVinc = numVinc; this.numPen = numPen; this.baseSalary = baseSalary; this.birthDate = birthDate; this.email = email; this.banco = banco; this.agencia = agencia; this.conta = conta; this.department = department; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getNumFunc() { return numFunc; } public void setNumFunc(Integer numFunc) { this.numFunc = numFunc; } public Integer getNumVinc() { return numVinc; } public void setNumVinc(Integer numVinc) { this.numVinc = numVinc; } public Integer getNumPen() { return numPen; } public void setNumPen(Integer numPen) { this.numPen = numPen; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public Double getBaseSalary() { return baseSalary; } public void setBaseSalary(Double baseSalary) { this.baseSalary = baseSalary; } public Integer getBanco() { return banco; } public void setBanco(Integer banco) { this.banco = banco; } public Integer getAgencia() { return agencia; } public void setAgencia(Integer agencia) { this.agencia = agencia; } public Integer getConta() { return conta; } public void setConta(Integer conta) { this.conta = conta; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Seller other = (Seller) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } @Override public String toString() { return "Seller [id=" + id + ", name=" + name + ", numFunc=" + numFunc + ", numVinc=" + numVinc + ", numPen=" + numPen + ", baseSalary=" + baseSalary + ", birthDate=" + birthDate + ", email=" + email + ", banco=" + banco + ", agencia=" + agencia + ", conta=" + conta + ", department=" + department + "]"; } }
-
Estou com problemas ao carregar os dados do banco de dados: não está carregando todos os dados para o formulário, até então não tem erros, mas ao usar o botão salvar ocasiona o seguinte erro na linha abaixo:
Caused by: java.lang.NullPointerException
at model.dao.impl.SellerDaoJDBC.insert(SellerDaoJDBC.java:40)
at model.services.SellerService.saveOrUpdate(SellerService.java:19)
at gui.SellerFormController.onBtSaveAction(SellerFormController.java:128)@Override public void insert(Seller obj) { PreparedStatement st = null; try { st = conn.prepareStatement( "INSERT INTO seller " + "(Name, NumFunc, DepartmentId) " + "VALUES " + "(?, ?, ?)", Statement.RETURN_GENERATED_KEYS); st.setString(1, obj.getName()); st.setInt(2, obj.getNumFunc()); st.setInt(11, obj.getDepartment().getId()); int rowsAffected = st.executeUpdate(); if (rowsAffected > 0) { ResultSet rs = st.getGeneratedKeys(); if (rs.next()) { int id = rs.getInt(1); obj.setId(id); } DB.closeResultSet(rs); } else { throw new DbException("Unexpected error! No rows affected!"); } } catch (SQLException e) { throw new DbException(e.getMessage()); } finally { DB.closeStatement(st); } }
-
@AdrianoSiqueira Ficou muito bom, está retornando o valor correto. Eu esqueci de passar para a outra classe o cálculo: double margBruPres = (cotaBruta * 0.30); como faço para passar para a classe AccountSGC? Mais um detalhe, o programa não está aceitando o separador ponto ou vírgula, é possível de usar o padrão do Brasil e não o Americano? Desde já agradeço a resposta!
-
//PROGRAMA PRINCIPAL import javax.swing.JOptionPane; import java.util.Locale; import java.util.Scanner; import entities.AccountSGC; public class Main { public static void main(String[] args) throws NumberFormatException { Scanner sc = new Scanner(System.in); Locale.setDefault(Locale.US); AccountSGC account; int liqPst = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor líquido da Pens: ")); int cotaBruta = Integer.parseInt(JOptionPane.showInputDialog("Informe o valor da cota pens bruta: ")); int somaConsig = Integer.parseInt(JOptionPane.showInputDialog("Informe a Soma Consig tipo Empréstimo N em Andam: ")); float margBruPres = (cotaBruta * 0.30F); if(liqPst > 0.00F){ account.margem(margemValue); account = new AccountSGC(liqPst); JOptionPane.showMessageDialog(null,"Margem Consignável: "+margemConsig,"margemConsig",JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(null,"Valor líquido NEGATIVO: "+liqPst,"liqPst",JOptionPane.INFORMATION_MESSAGE); } sc.close(); } } //PROGRAMA SECUNDÁRIO package entities; public class AccountSGC{ private float liqPst; private float cotaBruta; private float margemConsig; // public AccountSGC(float liqPst, float cotaBruta){ this.liqPst = liqPst; this.cotaBruta = cotaBruta; } public float getliqPst(){ return liqPst; } public float setliqPst(){ this.liqPst = liqPst; } public double getmargemConsig(){ return margemConsig; } public void Margem(double cotaBruta){ margemConsig = ((liqPst + somaConsig) - margBruPres)*1.00F; } }
Pessoal, crie uma calculadora que funciona com apenas uma classe, quando tento fazer com duas classes (construtores)não funciona...se possível alguém tenta rodar e dar umas dicas..
-
/* Função recursiva, soma serie (i, j, k). Esta função devolve a soma da série de valores do intervalo (i,j), com incremento k. */ #include<stdio.h> #include<stdlib.h> int SomaSerie(int i, int j, int k){ int soma = 0; if(i<j){ soma i + SomaSerie(i + k, j, k); }else{ return soma = soma + j; } } int main(){ int i, j, k; printf("\nInforme o intervalo fechado [i, j]: "); scanf("[%d, %d]", &i, &j); printf("\nInforme k: "); scanf("%d", &k); printf("\n"); printf("Soma = %d", SomaSerie(i, j, k)); return 0; }
Estou tentando fazer funcionar essa função, mas tem um erro na linha: soma i + SomaSerie(i + k, j, k);
-
#include<stdio.h> #include<math.h> /*Programa recursivo que receba um número inteiro positivo par N e imprima todos os números pares de 0 até N em ordem decrescente*/ int paresdecres(int n, int lista){ printf("%d\n", lista); if(n>lista && lista %2 == 0){ return paresdecres(n -2, lista); }else{ return 0; } } int main(void){ int n; int lista = 0; printf("Digite um número\n"); scanf("%d", &n); paresdecres(n,lista); return 0; }
Fiz esse programa que deveria retornar nos números pares na ordem decrescente, mas retorna zero para cada posição, o que pode ser?
-
#include<stdio.h> #include<math.h> /*Programa recursivo que receba um número inteiro positivo N e imprima todos os números naturais de 0 até N em ordem decrescente.*/ //PROCESSAMENTO int imprimenumeros(int n, int y){ printf("%d\n", y); if(n > y){ return imprimenumeros(n, -1); }else{ return 0; } } int main(){ //ENTRADA int n; int y = 0; printf("Digite um número inteiro N: \n"); scanf("%d", &n); //SAÍDA imprimenumeros(n,y); return 0; }
Pessoal, fiz um programa para listar os números na ordem crescente, tudo funcionou direito, mas quando tentei fazer na ordem decrescente, não funciona...
-
#include<stdio.h> #define N 5 //Programa com função recursiva que receba números do usuário e permita somar os elementos de um vetor de inteiros. int soma(int vet[], int tamanho){ if(tamanho == 1){ return vet [0]; }else{ return vet[tamanho - 1] + soma(vet, tamanho -1); } } int main(){ printf("------SOMA DE VETORES-----\n"); int resultado = soma(vet, N); for(int i = 0; i < 5; i++){ printf("Informe %d/5 valor:", (i+1)); scanf("%d", &vet[i]); } printf("Soma dos números %d \n", resultado); printf("-----------------FIM-----------------\n"); return 0; }
Meu problema é fazer o link entre a recursividade e o principal main. Gostaria que o programa recebesse do usuário 5 números e somasse em vetor!
-
Bom dia, colega,
já resolvi no post acima:
faltava corrigir a linha : printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k,n));
obrigado pela atenção.
-
2 horas atrás, nigolino disse:
#include<stdio.h> #include<math.h> //Programa com função recursiva que receba dois inteiros positivos k e n e calcule kn. int potencia(k, n){ if(k == 0){ return 0; }else{ return(pow(k,n)); } } int main(){ int k, n; printf("----------Calculo de Potência Kn-----------\n"); printf("Informe um inteiro positivo K: "); scanf("%d", &k); printf("Informe um inteiro positivo n: "); scanf("%d", &n); printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k)); printf("--------------------FIM--------------------\n"); return 0; }
Fiz as devidas correções, mas o resultado não é o esperado o programa está usando o próprio número como expoente...
faltava corrigir a linha : printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k,n));
-
#include<stdio.h> #include<math.h> //Programa com função recursiva que receba dois inteiros positivos k e n e calcule kn. int potencia(k, n){ if(k == 0){ return 0; }else{ return(pow(k,n)); } } int main(){ int k, n; printf("----------Calculo de Potência Kn-----------\n"); printf("Informe um inteiro positivo K: "); scanf("%d", &k); printf("Informe um inteiro positivo n: "); scanf("%d", &n); printf("O valor de %d elevado a %d é :%d\n", k,n, potencia(k)); printf("--------------------FIM--------------------\n"); return 0; }
3 horas atrás, MB_ disse:A função pow(b,e) é a potência baseexpoente.
Já potencia (k) não é adequada, primeiro porque já existe uma função potência, segundo a potência tem 2 argumentos.
Sim sua função "potência" pode ter um segundo argumento -n- que é o expoente da base k.
Como sugere bem aqui:
no cabeçario da função para sua chamada.
int potencia (k,n)
Fiz as devidas correções, mas o resultado não é o esperado o programa está usando o próprio número como expoente...
-
10 horas atrás, arfneto disse:
Entendo. Pergunto porque talvez você fosse o caso de usar um banco de dados se precisar fazer consultas mais elaboradas no futuro. sqlite é a opção simples. E se pudesse usar outra linguagem, C++ tem várias estruturas que poderia aproveitar para indexar tudo, como listas, filas, árvores e coisas assim. Só declarar e usar.
Sobre SQLite em C pode ver algo em https://www.sqlite.org/cintro.html.
Claro, em C é mais divertido
De volta ao tópico: Em relação ao seu exemplo:
Acho mais produtivo usar então os argumentos direto na linha de comando, e vou deixar um exemplo com dois parâmetros, para usar assim --- imaginando que seu programa se chame cadastro:
cadastro arquivo linhas ou apenas cadastro
E se você chamar assim
cadastro arquivo.txt 200 le as primeiras 200 linhas do arquivo "arquivo.txt" cadastro arquivo.doc le todas as linhas de "arquivo.doc" cadastro le os campos a partir da entrada padrão mesmo
Assim fica mais fácil de testar... E você pode editar direto uns arquivos de teste
Seguindo a lógica de que falei, escrevi uma parte de uma possível solução em puro e simples C. Vou postar aqui agora porque já pode ser útil. Falta implementar a estrutura de dados para acumular os valores e tenho uma ideia para uma solução simples que permitiria responder sua questão. Quando eu tiver um tempo volto a postar a solução, e aí completa. Se eu tiver tempo talvez escreva amanhã.
Eis o que tem aqui:
O programa lê o arquivo de entrada e extrai os dados, com a opção de limitar o número de linhas... Para essas 11 linhas em "c.txt"
2345678 nome com muitos espacos 12345678 12345678 nome com espacos 12345678 ABCD 3401 LUCIA GONCALVES 0017786001 00000 BR00 00000 3401 LUCIA GONCALVES 0017786001 00 00000 3402 MARTA PEREIRA DOS SANTOS 00177 00000 3401 LUCIA GONCALVES 0017786001 00000 00000 3402 MARTA PEREIRA DOS SANTOS 0017786002 00000 08
E usando cadastro c.txt 8
O programa gera
Como as linhas aparecem na tela você pode ir ao arquivo texto de origem e corrigir algo ou ver o que está errado no arquivo ou no programa e continuar refinando a solução. Ou se usa linux pode ir usando grep awk sort, pr e ir criando seus relatórios sem programar nada.
Para ir a uma determinada linha do arquivo de entrada e que aparece na tela você pode, se usa linux e vi, digitar :n e ir para a linha n do arquivo direto. Se usa Visual Studio pode usar control-G e digitar a linha.
Vendo uma linha com mais detalhe:
Eu uso Windows 10 e Visual Studio '19 e meu compilador não é assim o máximo para rodar C, e faz isso como uma cortesia digamos. Até tenho máquinas Linux na mesa de trás mas não tenho tempo para criar um ambiente nelas para essas coisas que faço com meu tempo livre...
De volta ao programa:
note o nome do programa na primeira linha: trata-se do argumento zero da linha de comando e sempre tem o nome do programa executável: argv[0]. Os próximos valores são opcionais e são aqueles que você digita na lionha de comando e vai entender ao ler a fonte em main().
Ai vem para cada linha da entrada o numero dela, o tamanho do nome e as posições de início e fim como o programa identificou. Logo depois uma linha mostra com asteriscos onde o programa acha que está o nome, para facilitar para conferir.
Depois o programa isola o nome, descartando o que não for letra à esquerda e à direita e depois troca qualquer sequência de espaços por um espaço apenas, para poder tratar o caso em que um mesmo nome tenha sido digitado com espaços a mais ou a menos. E converte todas as letras para minúsculas para ter certeza que não vai diferenciar nomes só por uma inicial maiúscula por exemplo. Essa última linha, que tem a tag (comprimido) é a que será usada para cadastrar o nome no banco de dados.
O programa tem essas 5 funções, alem de main()
int acha_o_nome(int, int, char*); int ajusta_o_nome(int, char*); int completa_buffer(Buffer*); int trata_o_nome(int, char*); int uma_linha(char*, const int, Buffer*);
e a lógica é bem simples. Não é a melhor solução, nem uma boa solução possivelmente, mas sugiro dar uma lida. Gira em torno da estrutura abaixo e gera os nomes para cadastrar depois e comparar. Na prática lê o arquivo em segmentos de um certo amanho --- como 32k no exemplo --- e aí vai caçando as linhas dentro do buffer. Quando acaba lê mais um pedaço e assim vai.
typedef struct { unsigned char * pBuffer; int disponiveis; int proximo; FILE * arquivo; } Buffer;
Eis o trecho de main() que implementa a lógica
buffer.pBuffer = malloc((size_t)(_TAMANHO_BUFFER)); buffer.disponiveis = 0; buffer.proximo = 0; buffer.arquivo = Entrada; do { int t; status = uma_linha(linha, _LIMITE_LINHA, &buffer); if (status > 0) { // leu uma linha: em branco? linhas_lidas++; if ((t = strlen(linha)) > 0) { // tem algo na linha acha_o_nome(linhas_lidas, t, linha); } else { linhas_em_branco++; fprintf(stderr, "Linha %d: Linha em branco\n", linhas_lidas); } // end if if (linhas_lidas < limite_teste) continue; fprintf(stderr, "\n\n\n***** atingido limite de %d linhas *****\n", limite_teste); break; } // end if } while (status >=0); free(buffer.pBuffer); fclose(Entrada); printf("Final: Lidas %d linhas --- %d em branco\n", linhas_lidas, linhas_em_branco); return EXIT_SUCCESS; }
Na verdade é quase o programa todo
O programa chama uma_linha() para tentar ler a próxima linha e se consegue chama acha_o_nome() para isolar o nome e esta chama trata_o_nome() para continuar o serviço. Se já tem um plano para cadastrar os caras pode usar direto em ajusta_o_nome() que é onde o programa faz a compressão final do nome lido.
Depois escrevo uma opção para o cadastro e a identificação final dos nomes e com as duplicatas identificadas.
Eis o programa todo até aqui
#define _CRT_SECURE_NO_WARNINGS #define _TAMANHO_BUFFER (32768) #define _LIMITE_LINHA (128) #include "ctype.h" #include "errno.h" #include "stdio.h" #include "stdlib.h" #include "string.h" typedef struct { unsigned char * pBuffer; int disponiveis; int proximo; FILE * arquivo; } Buffer; typedef struct { unsigned int linhas_lidas; unsigned int linhas_em_branco; unsigned int nomes_validos; } Base_de_dados; int acha_o_nome(int, int, char*); int ajusta_o_nome(int, char*); int completa_buffer(Buffer*); int trata_o_nome(int, char*); int uma_linha(char*, const int, Buffer*); int acha_o_nome(int n, int t, char* l) { // n = numero da linha // t = tamanho da linha // l = a linha int inicio = 0; int final = 0; int i; // linha em l com t caracteres, t>0 for (inicio = 0; inicio < t; inicio++) if (!isdigit(l[inicio])) break; for (final = inicio; final < t; final++) if (isdigit(l[final])) break; if (inicio == final) { fprintf(stderr, "Linha %d: Nome nao identificado\n", n); return 1; } fprintf(stderr,"Linha %d: Nome com %d caracteres. Posicao [%d,%d]\n", n, (final - inicio), inicio, final); fprintf(stderr,"%s\n", l); for (i = 0; i < inicio; i++) fprintf(stderr, "-"); for (i = inicio; i < final; i++) fprintf(stderr, "*"); for (i = final; i < t; i++) fprintf(stderr, "-"); fprintf(stderr, "\n"); // cria uma string com o nome e passa para a rotina que vai // cadastrar a entrada i = final - inicio + 1; char* pessoa = malloc((size_t) i); *(pessoa+i-1) = 0; // pra nao esquecer: finaliza a string memcpy(pessoa, (l+inicio), (final-inicio) ); fprintf(stderr, "[%s]\n", pessoa); trata_o_nome(n, pessoa); free(pessoa); return EXIT_SUCCESS; } // end acha_o_nome() int ajusta_o_nome(int n, char* nome) { // a partir de um nome ok converte caracteres e comprime espacos int in_space = 0; // usado para comprimir os espacos int t = strlen(nome); char* pVetor = NULL; // ponteiro para a string de saida char* vetor = malloc(t+1); // copia nome para vetor comprimindo os brancos ou tabs *vetor = tolower(*nome); // copia o primeiro caracter pVetor = vetor + 1; *pVetor = 0; for (int i=1; i<t-1; i++) { if (isblank(nome[i])) { if(in_space==1) { continue; } else { in_space = 1; *pVetor = ' '; pVetor++; continue; } } else { in_space = 0; *pVetor = tolower(nome[i]); pVetor++; } // end if } // end for // copia o ultimo caracter, que com certeza nao era branco *pVetor = tolower(*(nome+t-1)); pVetor++; *pVetor = 0; // termina a string de saida fprintf(stderr, "Linha %d: Nome[%s] (comprimido)\n", n, vetor); free(vetor); return 0; } // end ajusta_o_nome() int completa_buffer(Buffer* b) { // retorna // 0 ao completar o buffer ou // -1 se EOF ou erro no arquivo unsigned char* p = b->pBuffer; // desloca para o inicio o que tinha sobrado no buffer for(int i=0; i<(b->disponiveis); i++) *(p+i) = *(p+ i + b->proximo); int a_ler = _TAMANHO_BUFFER - b->disponiveis; // tenta completar p = b->pBuffer + b->disponiveis; // le a partir do que ja tinha int lidos = fread( p, 1, a_ler, b->arquivo ); b->disponiveis = b->disponiveis + lidos; b->proximo = 0; if (lidos == 0) return(-1); else return 0; // sinaliza final } // end completa_buffer() int trata_o_nome(int n, char* nome) { int t = strlen(nome); int inicio = 0; int final = 0; // linha em l com t caracteres, t>0 for (inicio=0; inicio<t; inicio++) { if (isblank(nome[inicio])) { continue; } else { break; } // end if } // end for if (inicio >= t) { // pode estar toda em branco fprintf(stderr, "Linha %d: Nome [%s] em branco\n", n, nome); return -1; } for (final=(t-1); final>=inicio; final--) { if (!isblank(nome[final])) { break; } else { continue; } // end if } // end for if (inicio >= final) return 1; nome[final+1] = 0; // trunca aqui fprintf(stderr, "Linha %d: Nome [%s]\n", n, nome + inicio); ajusta_o_nome(n, nome+inicio); fprintf(stderr, "__________ __________ __________ __________ __________ __________ \n\n"); return 0; } // end trata_o_nome() int uma_linha( char* linha, const int maximo, Buffer* buf) { // // retorna // - 1 e a linha em linha ou // - 0 se nao tem uma linha completa no buffer // - -1 se acabou o arquivo // int lidos; unsigned char* inicio = buf->pBuffer + buf->proximo; unsigned char* p = inicio; for (int i=0; i<buf->disponiveis; i++) { if (*p == '\n') { *p = 0; strcpy(linha, inicio); lidos = strlen(linha); buf->proximo += 1 + i; buf->disponiveis -= i+1; return 1; } else { p++; } // end if } // end for int n = completa_buffer(buf); return n; } // end uma_linha() int main(int argc, char** argv) { FILE* Entrada = NULL; Buffer buffer; Base_de_dados base; int linhas_lidas = 0; int linhas_em_branco = 0; int status = 0; char linha[256]; int limite_teste; // para em n linhas do arquivo printf("\n\nRodando: %s\n\n\n", argv[0]); if (argc > 1) { Entrada = fopen(argv[1], "r"); if (Entrada == NULL) { fprintf(stderr, "Erro abrindo %s\n", argv[1]); return 0; } // end if fprintf(stderr, " - Lendo a partir do arquivo %s\n", argv[1]); if (argc > 2) { limite_teste = atoi(argv[2]); fprintf(stderr, " - Limitado a %d linhas na entrada\n\n\n", limite_teste); } else { limite_teste = INT_MAX; } // end if } else { fprintf(stderr, "Usando entrada padrão\n"); Entrada = stdin; }// end if buffer.pBuffer = malloc((size_t)(_TAMANHO_BUFFER)); buffer.disponiveis = 0; buffer.proximo = 0; buffer.arquivo = Entrada; do { int t; status = uma_linha(linha, _LIMITE_LINHA, &buffer); if (status > 0) { // leu uma linha: em branco? linhas_lidas++; if ((t = strlen(linha)) > 0) { // tem algo na linha acha_o_nome(linhas_lidas, t, linha); } else { linhas_em_branco++; fprintf(stderr, "Linha %d: Linha em branco\n", linhas_lidas); } // end if if (linhas_lidas < limite_teste) continue; fprintf(stderr, "\n\n\n***** atingido limite de %d linhas *****\n", limite_teste); break; } // end if } while (status >=0); free(buffer.pBuffer); fclose(Entrada); printf("Final: Lidas %d linhas --- %d em branco\n", linhas_lidas, linhas_em_branco); return EXIT_SUCCESS; }
Roda tranquilo em Windows e provavelmente no linux sem qualquer mudança.
Sugiro testar o programa com o seu arquivo e ver o que acontece, ao menos com umas primeiras linhas, e depois com todas as linhas.
Até ++
Demais esse programa, vou levar um mês para entender todo ele..ficou 10.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Erro ao inserir dados no BD (Netbeans/MySQL)
em Java/Android SDK
Postado
Correto, esta versão do Postgre não aceita letra inicial maiúscula, reconhece como minúscula, estava igual em ambos os programas quando apresentava erro, o que fiz foi deixar os dois programas (códigos) pgAdmin e netbeans com letras minúsculas e então validou e inseriu os dados no BD. Solucionado!