검색
아하에서 찾은 12건의 질문
- 생활꿀팁생활Q. c 프로그래밍 세그멘테이션 오류계속 세그멘테이션 오류가 뜨는데 어디서 잘못된건지 모르겠습니다ㅜㅜㅜㅜㅜ조언이나 고칠 점 부탁드립니다 ㅜㅜㅜ#include <stdio.h>#include <stdlib.h>void trianglePrint( int **arr, int i, int j){ printf("%d ", arr[i][j]); }void pascalTriangle (int **arr, int i, int j){ for (j = 1; j <= i; j++) { arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]; trianglePrint(arr, i, j); }}int main(){ int a, i, k, j; scanf("%d", &a); int **arr = NULL; arr = (int *) malloc ( sizeof(int ) * a); arr[0] = (int ) malloc ( sizeof(int) a*a ); for( int k = 1; k < a; k++) { arr[k] = arr[ k-1 ] + a; } for (i = 1; i <= a; i++) { pascalTriangle(arr, i, j); printf("\n"); } return 0;}
- 생활꿀팁생활Q. 자바 스택이용해서 휘위표기법으로 바꾸기 질문좀합니다자바 배운지 얼마 안돼서 많이 부족하고 코드가 난잡할 수 있습니다ㅠㅠ최선을 다해 짜봤는데 오류가 뜨네용..어느 부분에서 오류가 있을까요....package test;import java.util.Stack;import java.util.ArrayList;class Converter{public String result = "";String now = "";String s="";ArrayList<String> con_input = new ArrayList<String>(); //가변 크기의 배열->용량 절약public int isNum(String str){ //숫자혹은.인지 연산자인지 알려주는 메소드char ch=str.charAt(0); //0번째 문자를 가져오기if((ch>='0' && ch<='9') || ch == '.') //숫자이거나 .이면return 1;else if(ch=='%') //%이면return -1;else return 0; //연산자이면(괄호, +-*/)}public int operator(String str) { //연산자 가중치 알려주는 메소드switch(str) {case "+" : case "-" : return 1;case "*" : case "/" : return 2; default : return 0;}}//string으로 받은 후 퍼센트 연산 해주면서 arraylist로 바꿀 것..->연산자 만날 때 마다 끊기public String converter(String input) { //후위식으로 변환해주는 메소드StringBuilder sb = new StringBuilder(input); //%위해Stack<String> st = new Stack<String>();int start = 0;for(int i = 0; i<sb.length(); i++) { //arraylist로 바꾸면서 %도 없애줌if(isNum(now)==-1) //%이면{sb.delete(i,i+1); //%삭제sb.insert(i,"*0.01"); //%자리에 *0.01 삽입 ->길이도 늘어나겠지?i--;}if(isNum(now)==0) //+-*/괄호 이면 그전까지 자르기{if(isNum(sb.substring(i-1,i))==0) //그 전이 연산자나 괄호인 경우con_input.add(sb.substring(i,i+1)); //연산자나 괄호 추출else{con_input.add(sb.substring(start, i)); //연산자 전까지의 숫자 추출con_input.add(sb.substring(i,i+1)); //연산자나 괄호 추출start = i+1;}}/*후위식으로 바꾸기*/for(int j = 0; j<con_input.size(); j++){now = con_input.get(j); //하나 추출해서 now에 넣기if(now.contentEquals("+") || now.contentEquals("-") || now.contentEquals("*") || now.contentEquals("/") ||now.contentEquals("(") || now.contentEquals(")")){ //연산자이면switch(now) {case ("("):st.push(now);break; //(를 만나면 바로 스택에 넣기case (")"):while(true) {s= st.pop();if(!(s.contentEquals("("))){result = result.concat(s);}else{st.push(s);break;}//()사이 연산자들 모조리 스택에서 빼서 추가}s = st.peek();if(s.contentEquals("("))st.pop(); break;case ("+"): case("-"): case("*"): case("/"):if(st.empty()) { //스택이 비었으면 무조건 스택에 넣기st.push(now);}else { //스택이 비지 않았으면 연산자 가중치 비교if(operator(st.peek()) >= operator(now)) //스택 내 윗것의 우선순위가 같거나 높으면{result = result.concat(st.pop());st.push(now);}else st.push(now); //스택 내 윗것의 우선순위가 작으면 now을 그냥 스택에 쌓아줌}break;default: break;}}else //숫자(double)이면result = result.concat(now); //숫자이거나 .이면 바로 result에 넣기}while(!(st.empty())){result = result.concat(st.pop());}return result;}} //바뀐 식 반환public class Test{public static void main(String[] args) {Converter con = new Converter();System.out.println("3*(4+50%)");System.out.println(con.converter("3*(4+50%)"));}}