Add multilingual language and systems learning tracks

This commit is contained in:
Admin committed 2026-11-01 15:46:21 +08:00
1 parent 07338189fc
commit d8d1c40118
844 files changed
+6061

No files matched your search

@@ -0,0 +1,9 @@
# Objective-C — build and test
[Agila University track](https://edu.agilaos.com/track.php?track=15&lang=en)
About 15 minutes per lesson. Predict, run, change, explain, then complete the check in University.
- [Lesson 1: Collections and repeated work](lesson-1/lesson.html)
- [Lesson 2: A language feature worth understanding](lesson-2/lesson.html)
- [Lesson 3: Build, break, and test a study planner](lesson-3/lesson.html)
@@ -0,0 +1,15 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>Collections and repeated work</title><h1>Collections and repeated work</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>A collection stores related values. The loop visits 1, 2, and 3, updating the total from 0 to 1, then 3, then 6. Record this trace rather than guessing. Identify the first and last valid positions in this language: Pascal can declare a 1-based array, while many other examples use zero-based containers. Add another value and update the bounds correctly. Explain what an empty collection should produce.</p><p>Square brackets send a message to a receiver: <code>[plan completed]</code>. <code>@interface</code> declares methods and <code>@implementation</code> defines them. These GNUstep exercises use explicit memory management, not Apple ARC.</p><pre><code class="language-objectivec">#import &lt;Foundation/Foundation.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *minutes = [NSArray arrayWithObjects:
[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
int total = 0;
for (NSNumber *value in minutes) total += [value intValue];
printf(&quot;%d\n&quot;, total);
[pool drain];
return 0;
}
</code></pre><p><strong>Expected result:</strong> <code>6</code></p><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p><p><a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html">Language reference</a></p></html>
@@ -0,0 +1,14 @@
#import <Foundation/Foundation.h>
#include <stdio.h>
#include <assert.h>
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *minutes = [NSArray arrayWithObjects:
[NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
int total = 0;
for (NSNumber *value in minutes) total += [value intValue];
printf("%d\n", total);
[pool drain];
return 0;
}
@@ -0,0 +1,18 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>A language feature worth understanding</title><h1>A language feature worth understanding</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>Use the language note below to explain this example’s state changes. Identify what is copied, what is shared, what can fail, and what is released. Only some of those questions apply to this particular program: say which ones. Make one deliberate change, predict the effect, and compare it with the actual result. A familiar-looking operator in another language may obey a different rule.</p><p>Square brackets send a message to a receiver: <code>[plan completed]</code>. <code>@interface</code> declares methods and <code>@implementation</code> defines them. These GNUstep exercises use explicit memory management, not Apple ARC.</p><pre><code class="language-objectivec">#import &lt;Foundation/Foundation.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;
@interface StudyPlan : NSObject
- (int)completed;
@end
@implementation StudyPlan
- (int)completed { return 3; }
@end
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
StudyPlan *plan = [[StudyPlan alloc] init];
printf(&quot;%d\n&quot;, [plan completed]);
[plan release];
[pool drain];
return 0;
}
</code></pre><p><strong>Expected result:</strong> <code>3</code></p><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p><p><a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html">Language reference</a></p></html>
@@ -0,0 +1,17 @@
#import <Foundation/Foundation.h>
#include <stdio.h>
#include <assert.h>
@interface StudyPlan : NSObject
- (int)completed;
@end
@implementation StudyPlan
- (int)completed { return 3; }
@end
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
StudyPlan *plan = [[StudyPlan alloc] init];
printf("%d\n", [plan completed]);
[plan release];
[pool drain];
return 0;
}
@@ -0,0 +1,15 @@
<!doctype html><html lang="en"><meta charset="utf-8"><title>Build, break, and test a study planner</title><h1>Build, break, and test a study planner</h1><p>15-minute session: read for 3 minutes, trace for 3, experiment for 7, and complete the check for 2. Spend longer whenever you need.</p><p>A useful test compares a result with a requirement. The planner must never report negative remaining work for its stated nonnegative input domain. Run the starter, then deliberately remove the protection for completed counts above total. At least one check should fail. Restore it. Add two named study tasks, a summary, and boundary cases. Save the source and evidence on Agila Forge. Explain every line, including anything suggested by AI.</p><p>Square brackets send a message to a receiver: <code>[plan completed]</code>. <code>@interface</code> declares methods and <code>@implementation</code> defines them. These GNUstep exercises use explicit memory management, not Apple ARC.</p><pre><code class="language-objectivec">#import &lt;Foundation/Foundation.h&gt;
#include &lt;stdio.h&gt;
#include &lt;assert.h&gt;
int remaining(int total, int done) { return done &gt;= total ? 0 : total - done; }
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
assert(remaining(4,1)==3);
assert(remaining(4,4)==0);
assert(remaining(4,5)==0);
assert(remaining(0,0)==0);
puts(&quot;Passed&quot;);
[pool drain];
return 0;
}
</code></pre><p><strong>Expected result:</strong> <code>Passed</code></p><h3>Practice and evidence</h3><p>Keep three notes: your prediction, the actual result, and why they match or differ. The completion check grades understanding; the practice task builds skill.</p><p><a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html">Language reference</a></p></html>
@@ -0,0 +1,14 @@
#import <Foundation/Foundation.h>
#include <stdio.h>
#include <assert.h>
int remaining(int total, int done) { return done >= total ? 0 : total - done; }
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
assert(remaining(4,1)==3);
assert(remaining(4,4)==0);
assert(remaining(4,5)==0);
assert(remaining(0,0)==0);
puts("Passed");
[pool drain];
return 0;
}