문제

나는에 대해를 시작(동료와 프로그래머)프로그래밍 및 알고리즘을 클럽 내에서 고등학교입니다.선택의 언어는 C++-에 대해 죄송하는,내가 변경할 수 없습니다.우리가 추측할 수 있는 학생들은 약간의 경험에서 앞서 언급한 주제입니다.

당신은 무엇을 생각하는 가장 기본적인 개념을 내에 초점을 맞추어야?

내가 알고있는 무언가를 가르친 이미 있는 것을 분명히지 않은 쉬운 일이 아니다.나는 깨닫는 첫 번째 회의가 주어져야 한 극단적인 관심을 놀라게 학생들이다-따라서 나는 당신에게.

편집: 는 것으로 나타났 아마 사이의 주요 차이점은 프로그래머 및 초보자는"프로그래머의 방법으로"생각이 들기도,개념화하는 문제로,당신은 알고,알고리즘이 있습니다.나는 그것이 중요한 문제의 연습,그러나 당신은 당신이 알고있는 어떤 종류의 운동/개념/수 있는 것들을 자극하는 개발이 지역에서?

도움이 되었습니까?

해결책

프로그래밍 재미!

가능한 것들에 대해 이야기하는 것 프로그램 대회는 하나의 클럽을 잡고있는 자체 또는 그것에 입력할 수 있습니다.나는 경쟁에서 프로그래밍 대회에서 대학교(ACM)수준과 기능에 대한 자세한 내는 그들은 그들을 낮은 수준에서뿐만 아니라.

그런 종류는 이벤트의 수 있습니다 정말 그 일부 경쟁심을 가져 클럽에 회원 가깝습니다.

것을 프로그래밍에 대해 중 하나.아마도 제안하는 데 LAN 자는 당신이 게임,토론 프로그래밍 등이 될 수 있는 좋은 생각이 아니다.

측면에서의 실제적인 주제를 통해 가는 프로그래밍/알고리즘과 관련,내가 그룹으로 시도하는 몇 가지의 이러한 프로그래밍 문제에 이 프로그래밍 경쟁 입문서"프로그래밍 문제": Amazon 링크

들이 밖으로 시작하는 매우 기본적인 프로그래밍 문제와 천천히 진행으로 문제가 필요한 다양한 데이터 구조는 다음과 같:

  • 사전
  • Etc.

대부분의 문제는 주어진 C++.

그리고 그들은 결국으로 진행되는 고급 문제를 포함하는 그래프 순회하고 인기있는 그래프 알고리즘(트라의,etc.),Combinatrics 문제,etc.각각의 문제가 재미있고에서 주어진 작은"이야기"같은 형식입니다.하지만 경고,이들 중 일부는 매우 어렵습니다!

편집:피자와 소다 아픈 적이 중 하나에서 그들에게 클럽의 회의.우리의 ACM 클럽에는 피자의 모든 회의(한 달에 한 번).비록 우리의 대부분은 여전히 표시 그것은 좋은 아이스 차단기입니다.특히 새로운 클럽 또는 회원입니다.

다른 팁

분해

나에게 프로그래밍의 독특한 점은 작업을 컴퓨터를위한 충분히 작은 단계로 분류합니다.. 이것은 언어에 따라 다르지만 100에 계산하기 위해 "루프 용"을 작성해야한다는 사실은 익숙해지는 데 걸립니다.

"하향식"접근 방식은이 개념에 도움이 될 수 있습니다. 프로그램의 마스터 기능을 만들기 시작합니다.

filterItemsByCriteria();

그것이 어떻게 작동하는지 전혀 모르므로 추가 단계로 분류합니다.

(참고 : 나는 C ++를 모른다. 그래서 이것은 일반적인 예일 뿐이다)

filterItemsByCritera() {
  makeCriteriaList();
  lookAtItems();
  removeNonMatchingItems();
}

그런 다음 각 사람들을 더욱 분해합니다. 곧 기준 목록 등을 만드는 데 걸리는 모든 작은 단계를 정의 할 수 있습니다. 모든 작은 기능이 작동하면 큰 기능이 작동합니다.

아이들이 "왜?"라고 계속 물어 보는 게임과 비슷합니다. "어떻게?"를 계속 물어봐야한다는 것을 제외하고는 모든 것을 말한 후에.

링크 된 목록 - 고전적인 인터뷰 질문과 정당한 이유.

나는 C 서브 세트로 작업하려고 노력하고 OO 물건으로 시작하려고하지 않을 것입니다. 기본 사항 중 일부를 이해 한 후에 도입 될 수 있습니다.

인사말!

나는 당신이 가고 있다고 생각합니다 방법 특정 언어를 강요하고 특정 주제와 커리큘럼을 연구하는 데있어 자신보다 앞서. 귀하 (및 일부 응답자)는 "프로그래밍 클래스를 이끌고"프로그래밍 클럽을 조언하는 것과 같은 것 같습니다. 그들은 매우 다른 것입니다.

나는 그룹을 함께 모을 것이고 그룹은 정확히 무엇을 결정해야합니다 그들 클럽에서 나가고 싶어. 본질적으로 클럽을위한 "헌장"을 만드십시오. 그런 다음 (그리고 그때에만) 선호하는 언어/플랫폼, 얼마나 자주 만나야하는지, 회의에서 일어날 일 등과 같은 결정을 내릴 수 있습니다.

최선의 접근 방식은 다른 언어/플랫폼이 탐색되는 "설문 조사"라는 것이 밝혀졌습니다. 또는 최선의 접근 방식은 "주제"라는 점으로, 주제가 (책 클럽과 같은) 정기적으로 변경되는 "주제"라는 것이 밝혀 졌을 수도 있습니다 (이번 달에는 포인터, 다음 달에 분류, 다음은 재귀 등). 그런 다음 예와 토론은 다양한 언어로 발생합니다.

제쳐두고, 나는 클럽의 "언어 공유"오리엔테이션을 고려할 것입니다. 아이들이 다른 언어와 플랫폼을 탐험하도록 격려하십시오.

행운을 빕니다.

글쎄, 그것은 프로그래밍 클럽이므로 재미 있어야합니다! 그래서 나는 즉시 경험에 약간의 손을 대고 있다고 말할 것입니다. Main () 방법이 무엇인지 설명하고 학생들이 Hello World 프로그램을 작성하게하십시오. Hello World 프로그램을 점차적으로 개선하여 기능을 제공하고 사용자 입력을 인쇄합니다.

초보자에게는 알고리즘에 너무 빨리 들어 가지 말고 C ++로 먼저 플레이하도록합니다.

위에서 언급 한 사람, "프로그래밍을 재미있게 만듭니다". 오늘날 사람들이 학습을 위해 배우지 않는다는 것은 흥미 롭습니다. 대부분의 사람들은 원합니다 즉각적인 만족.

프로그래밍을 사용하여 약간의 논리를 가르칩니다. 이것은 문제 해결에 도움이됩니다. 내가 머리에 가지고있는 분류는 게임을 추측하고 있습니다.

  • 0에서 100 사이의 숫자로 추측하는 프로그램을 만드십시오.
  • 그들이 검은 잭 클론을 만들도록 ... 나는 이것을 기본적으로했다 :-(

종이 지침을 만드십시오.

  1. "튀긴 계란"이야기를 설명하십시오. 청각에 튀긴 계란을 만들기 위해 무엇을 할 것인지 물어보십시오. 그들이 생각하는 단계를 기록하게하십시오. 아마도 5 단계 미만의 알고리즘을 받게 될 것입니다. 그런 다음 컴퓨터에 계란을 튀기 위해 가르치려면 몇 단계를 기록 해야하는지 설명하십시오. 같은 것 :
1) Go to the Fridge 
2) Open the fridge door 
3) Search for eggs 
4) If there are no eggs - go to the shop to buy eggs ( this is another function ;) ) 
5) If there are eggs - calculate how many do you need to fry 
6) Close the fridge door 
7) e.t.c. :)
  1. C- 구문 시맨틱 등의 기본부터 시작하여 Bubble Sort와 같은 매우 기본적인 알고리즘을 설명하십시오.
  2. 청각이 구조화 된 프로그래밍에 익숙한 후에 (수업을 얼마나 자주하는지에 따라 몇 주 또는 몇 달이 걸릴 수 있음) C ++ 및 OOP로 전진 할 수 있습니다.

Deitel & Deitel의 C ++ 프로그래밍의 내용은 괜찮은 소개이며 각 장의 끝에서 제안 된 연습은 훌륭한 장난감 문제입니다.

기본적으로, 당신은 다음에 대해 이야기하고 있습니다 : - 제어 구조 - 기능 - 배열 - 포인터 및 문자열

STL에 대한 소개를 후속 조치를 취하고 싶을 수도 있습니다 ( "Ok, 이제 우리는 어려운 방법을 해냈으니 ... 여기에 더 간단한 옵션이 있습니다")

예를 들어 정렬과 같은 문제를 이해하게하여 시작하십시오. 이것은 매우 기본적이며 매우 빠르게 관련 될 수 있어야합니다. 일단 그들이 문제를보고 일단 문제를 해결하기위한 도구/솔루션을 제시하십시오.

처음으로 합병 소트의 예를 보여 주었을 때의 느낌을 기억합니다. 나는 모든 단계를 따라갈 수 있었지만 도대체 내가 무엇을 위해 무엇을 했습니까? 그런 다음 문제에 대한 해결책을 갈망하면 도구와 솔루션을 훨씬 더 잘 이해할 수 있습니다.

간단한 "Hello World"프로그램으로 시작하십시오. 이것은 변수, 스트림 및 프로그램 흐름에 쓰기와 같은 기본 사항을 소개합니다.

그런 다음 거기에서 복잡성을 추가하십시오 (링크 된 목록, 파일 IO, 사용자 입력 얻기 등).

내가 Hello World로 시작하는 이유는 아이가 달리기 프로그램을 정말 빨리 보게 될 것이기 때문입니다. 처음부터 런닝 프로그램을 작성했기 때문에 거의 즉각적인 피드백입니다.

이모 큰 오 프로그래머가 배우기위한 가장 중요한 개념 중 하나입니다.

디버깅 콘테스트가 있습니다. 버그가 포함 된 코드 샘플을 제공합니다. 누가 가장 빠르거나 가장 빠른 사람을 찾을 수 있는지 확인하기 위해 컨테스트를하십시오.

C ++로 프로그래밍하지 않는 훌륭한 책이 있습니다.

당신은 항상 실수로부터 최선을 다하고 다른 사람들로부터 배우는 것을 선호합니다.

또한 코드가 거의 작동하더라도 경험이 거의없는 사람들은 코드를 참조하여 학습 할 수 있습니다.

답변 외에도 이 질문, 다루어야 할 중요한 주제가 있습니다. 다음은 수업을 어떻게 구성 할 수 있는지에 대한 예입니다.

첫 번째 수업 : 용어 및 구문

다루는 용어 : 변수, 연산자, 루프 (반복), 메소드, 예약어, 데이터 유형, 클래스

커버 할 수있는 구문 : 할당, 작동, if/when/else, 루프, 루프, 선택, 입력/출력

두 번째 수업 : 기본 알고리즘 구성

입력, 아마도 while 루프가 포함 된 몇 가지 간단한 알고리즘을 덮으십시오.

세 번째 수업 : 고급 알고리즘 주제

이것은 재귀, 매트릭스 조작 및 고급 수학과 같은 것들을위한 것입니다. 너무 복잡한 주제에 들어갈 필요는 없지만 실제 프로젝트에 유용 할 수있는 충분한 복잡성을 소개합니다.

최종 수업 : 그룹 프로젝트

그룹이 참여할 수있는 프로젝트를 만드십시오.

이것들은 하루 수업 일 필요는 없습니다. 며칠 동안 주제를 전파 할 수 있습니다.

의사 코드는 최초 여야합니다.

편집 : 총 프로그래밍 초보자라면 전반전을 프로그래밍에 대해 만들 것입니다. 일단 알고리즘에 대해 이야기하는 수준에 도달하면, 의사 코드는 손톱 아래에있는 것이 정말 중요합니다.

답장 주셔서 감사합니다!

그리고 그들에게 실제 문제 해결을 어떻게 가르치겠습니까?

나는 C ++ 구문과 몇 가지 기본 알고리즘을 알고있는 많은 학생들을 알고 있지만 실제 문제를 해결할 때 알고있는 지식을 적용 할 수는 없습니다. 엄격한 단계. 나는 동적 프로그래밍, 탐욕 등과 같은 '고급'접근 방식이 아니라 기본 알고리즘 사고 방식에 대해 이야기하지 않습니다.

나는 그들이 겪고있는 학습 과정이 좋지 않기 때문이라고 생각합니다. 다른 과학에서는 - 수학에서 - 그들은 정말 훌륭합니다.

알고리즘에 익숙하다고해서 구현할 수 있다는 의미는 아니며 프로그램을 프로그램 할 수 있다고해서 알고리즘을 구현할 수 있다는 의미는 아닙니다.

각 주제에서 간단하게 시작하십시오 (알고리즘 설계와 별도로 프로그래밍을 유지). 그들이 각각에 대한 손잡이가 있으면 천천히 두 개념을 하나로 모으기 시작합니다.

우와. C ++는 시작할 최악의 언어 중 하나입니다. 어떤 일이 작동하는 데 필요한 관련없는 쓰레기의 양과 관련하여 (Java는 약간 더 나빠질 것입니다).

보일러 플레이트가 많은 환경에서 초보자를 가르 칠 때, "여기에 간단한 C 프로그램이 있습니다. 우리는 파일 상단에있는이 모든 쓰레기가 나중에 무엇인지에 대해 논의하지만, 지금은 사이의 선에 집중합니다. ' int main (void) '및'반환 '진술은 모든 유용한 작업이 완료되는 곳입니다. "

이 지점을 지나면 기본 개념에는 기본 데이터 구조 (배열, 링크 된 목록, 트리 및 사전) 및 기본 알고리즘 (정렬, 검색 등)이 포함됩니다.

클럽이 소프트웨어 구축 개념을 가르쳐서 실제로 어떤 언어로 프로그램하는 방법을 배우게하십시오. Visual Studio를위한 12 개의 라이센스 구매를 실행하는 대신 학생들은 컴파일러를 사용하고 C 코드를 프로그램으로 전환하기 위해 시스템, 소스 파일, 개체 및 라이브러리를 만듭니다. 나는 이것이 진정으로 시작이라고 생각하고 실제로 많은 교육 기관들이 의존하고있는 목발없이 모든 플랫폼에서 소프트웨어를 만드는 방법을 이해할 수 있도록 힘을 실어줍니다.

선택의 언어에 관해서는 - 축하 - C ++는 수학적 단축키와 코드를 더 잘 수행 할 수있는 수백만 가지 방법 (또는 멋진 패턴을 구현하기위한 수백만 가지 방법)을 생각할 수 있다는 사실을 알게 될 것입니다.

질문에 : 내가 프로그램을 구걸 할 때 나는 항상 하나의 실제 문제를 여러 단계로 분해하려고 시도한 다음 작업이나 데이터 사이의 유사성을 보면 항상 더 게으르고 쉽고, 의미있는 방법을 찾으려고 노력할 것입니다. 구현하십시오.

패턴과 실제 알고리즘을 학습 할 때 우아함이 나왔습니다.

행크 : 큰 o ??? 당신은 시작 프로그래머에게 그들의 코드가 O (n^2)이고 당신의 코드는 n log n이라고 말하는 것을 의미합니다.

이것을 취하는 몇 가지 방법을 볼 수있었습니다.

1) 기본 프로그래밍 빌딩 블록. 조건부 진술, 예를 들어 스위치 및 IF/else는 무엇입니까? 반복 진술은 무엇입니까? 우리는 이것을 어떻게 결합하여 프로그램을 우리가 원하는 일련의 단계로 만들 수 있습니까? 식료품 청구서를 추가하거나 온도 나 거리를 메트릭에서 제국 또는 그 반대로 변환하는 것만 큼 쉬운 일을 할 수 있습니다. 문자열, 정수 또는 이중과 같은 기본 변수 유형은 무엇입니까? 또한 여기에서 당신은 고급 아이디어를 위해 부울 대수를 가질 수 있거나, 일부 사람들은 쉽고 다른 사람들이 쉽게 찾을 수 있고 다른 사람들은 열심히 찾을 수있는 2 ~ 16베이스에서 산술을하는 방법을 가르 칠 수 있습니다.

2) 알고리즘 적으로 비슷한 빌딩 블록이 무엇인지. 정렬은 가장 널리 논의되고 분석 할 수있는 매우 간단한 주제로, 가장 뇌가 죽을 수있는 버블 저트를 배우면 순서대로 보이는 요소를 교환하는 것보다 더 빨리 만드는 방법을 알아 내기 위해 노력할 수 있습니다.

3) 컴파일 및 런타임 요소. 콜 스택이란 무엇입니까? 힙은 무엇입니까? 예를 들어 코드 조각 및 데이터 조각과 같은 프로그램을 실행하려면 메모리가 어떻게 처리됩니까? 파일을 어떻게 열고 조작합니까? 컴파일 및 링크 란 무엇입니까? Make Files 란 무엇입니까? 이 중 일부는 간단하지만 클럽이 대부분의 시간을 다루는 일이 어떻게 작동하는지 보는 것만으로는 눈을 뜨게 될 수도 있습니다.

이 다음 2는 다소 도전적이지만 재미있을 수 있습니다.

4) : 1) 분할 및 정복, 2) 동적 프로그래밍, 3) 무차별 인력, 4) 데이터 구조 생성, 5) 예를 들어 Fibonacci 번호가 이미 해결 된 유사한 문제로 문제를 줄이는 것과 같은 알고리즘의 다양한 아이디어에 대해 논의 시작 프로그래머를주는 고전적인 재귀 문제, 그리고 6) 코인이 A, B, c.가있는 나라에있는 경우에 따라 변화를 예로 들면서 "욕심"이라는 아이디어. 다소 이국적인 무언가를 원한다면 최소 체중 스패닝 트리와 같은 그래프 이론 예제 또는 묘사하기가 쉽지만 해결하기가 어려울 수있는 무언가를 원한다면 일부 그래프 이론 예제에 들어갈 수 있습니다.

5) 수학적 기능. 1에서 N까지의 모든 숫자의 산물 인 Factorial을 어떻게 프로그램 하시겠습니까? 다양한 산술 또는 기하학적 시리즈의 합을 어떻게 계산 하시겠습니까? 또는 n 세트에서 R 요소의 조합 또는 순열 수를 계산합니까? 포인트 세트가 주어지면이 요구 사항을 충족하는 다항식과 비슷합니다. 예를 들어 x와 y라는 2 차원 평면에서는 2 점을 줄 수 있고 사람들이 선형 방정식 쌍을 해결 한 경우 경사면과 Y 차단이 무엇인지 알아낼 수 있습니다. 이미.

6) 링크 된 목록 및 배열을 사용하여 구현할 수있는 목록. 다양한 경우에 어느 것이 더 낫습니까? 삽입, 삭제, 찾기 및 정렬과 같은 기본 기능을 어떻게 구현합니까?

7) 추상 데이터 구조. 스택과 대기열은 무엇입니까? 수업을 어떻게 구축하고 테스트합니까?

8) 포인터. 이것은 메모리를 할당/탈당하는 방법과 같은 많은 주제로 이어집니다. 메모리 누출이란 무엇입니까?

이것이 다양한 출발점에 대한 나의 제안입니다. 토론을 시작하면 몇 명의 사람들을 함께 모을 수 있다면, 어떤 경우에는 같은 주제에 대해 이야기하는 것이 마음에 들지 않는 경우, 어떤 경우에는 분류가 당신이 얻고 싶다면 잘 다루어야 할 큰 주제가 될 수 있습니다. 더 좋은 점으로.

너희들은 "Tinypim 프로젝트를 구축 할 수있다"C ++ 표준 라이브러리부터 처음부터"그런 다음 작동 할 때 자신의 확장을 설계하기 시작하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top