「C-assign-2008-12-11」の編集履歴(バックアップ)一覧はこちら
「C-assign-2008-12-11」(2008/12/18 (木) 12:30:22) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*12月11日の宿題
**問題1
#codehighlight(c++){{
#include <stdio.h>
#define SIZE_OF_ARRAY(x) (sizeof(x) / sizeof((x)[0]))
// 使っているだけで目をつけられかねないhackコード
// これを見る前から知っていた人以外=素人にはお勧めできない
int main()
{
//740000という学生証番号ということで
int array[] = {10, 15, 23, 32, 24, 7, 9, 14, 74, 0, 00};
int array_even[SIZE_OF_ARRAY(array)];
int i, j;
//ポインタを使えということで無茶して使った
int *parray = array, *parray_even;
for(parray_even = array_even;
parray_even < array_even + SIZE_OF_ARRAY(array);
++parray_even)
{
parray_even[i] = 0;
}
for(i=0, j=0; i<SIZE_OF_ARRAY(array); ++i)
{
//この偶奇判定コードもトリッキーだ
if(array[i] >> 1 << 1 == array[i])
array_even[j++] = array[i];
}
printf("There are %d even numbers.\n", j);
for(i=0; i<j; ++i)
{
printf("%d\n", array_even[i]);
}
}
}}
*課題2
大したポイントはない。
*課題3
文字列比較がポイント。正直丸ごとパクられるとこれも一発でばれると思うので、書きなおしてみた。とはいえ、よそで見た手法を無意識のうちに取り入れてはいる。ポインタを使うとこんなに綺麗になるんだね…string.hのstrstrの実装を読んでみるのは参考になるかも。
#codehighlight(c++){{
const char * strsearch( const char *const target, const char *const query)
{
const char *c_target, *c_query, *c_current;
//queryが空文字列ならNULLを返す仕様にしている。
if(*query == '\0')
return NULL;
//targetが末尾に至るまで走査,whileのほうが分かりやすいがfor
for(c_current = target; *c_current != '\0'; ++c_current)
{
for(c_query = query, c_target = c_current
*c_target != '\0' && *c_target == *c_query;
++c_target, ++c_query)
{
if(c_query[1] == '\0')
return c_target - strlen(query) + 1;
}
}
return NULL;
}
}}
*12月11日の宿題
**問題1
#codehighlight(c++){{
#include <stdio.h>
#define SIZE_OF_ARRAY(x) (sizeof(x) / sizeof((x)[0]))
// 使っているだけで目をつけられかねないhackコード
// これを見る前から知っていた人以外=素人にはお勧めできない
int main()
{
//740000という学生証番号ということで
int array[] = {10, 15, 23, 32, 24, 7, 9, 14, 74, 0, 00};
int array_even[SIZE_OF_ARRAY(array)];
int i, j;
//ポインタを使えということで無茶して使った
int *parray = array, *parray_even;
for(parray_even = array_even;
parray_even < array_even + SIZE_OF_ARRAY(array);
++parray_even)
{
parray_even[i] = 0;
}
for(i=0, j=0; i<SIZE_OF_ARRAY(array); ++i)
{
//この偶奇判定コードもトリッキーだ
if(array[i] >> 1 << 1 == array[i])
array_even[j++] = array[i];
}
printf("There are %d even numbers.\n", j);
for(i=0; i<j; ++i)
{
printf("%d\n", array_even[i]);
}
}
}}
*課題2
大したポイントはない。
*課題3
文字列比較がポイント。正直丸ごとパクられるとこれも一発でばれると思うので、書きなおしてみた。とはいえ、よそで見た手法を無意識のうちに取り入れてはいる。ポインタを使うとこんなに綺麗になるんだね…string.hのstrstrの実装を読んでみるのは参考になるかも。
#codehighlight(c++){{
const char * strsearch( const char *const target, const char *const query)
{
const char *c_target, *c_query, *c_current;
//queryが空文字列ならNULLを返す仕様にしている。
if(*query == '\0')
return NULL;
//targetが末尾に至るまで走査,whileのほうが分かりやすいがfor
for(c_current = target; *c_current != '\0'; ++c_current)
{
for(c_query = query, c_target = c_current;
*c_target != '\0' && *c_target == *c_query;
++c_target, ++c_query)
{
if(c_query[1] == '\0')
return c_target - strlen(query) + 1;
}
}
return NULL;
}
}}
表示オプション
横に並べて表示:
変化行の前後のみ表示: