C/C++の宿題を片付け ..
258:デフォルトの名無しさん
08/11/05 16:55:22
#include <stdio.h>
int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;
printf("x[8]={1,2,3,4,5,6,7,8}\n");
printf("h[8]={8,7,6,5,4,3,2,1}\n");
k=0;
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
//printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8.0;
printf("Rxh[%d]=%2.3f\n",k+1,rxh[k]);
sum2=0;
}
return(0);
}
259: ◆591LS1rcWk
08/11/05 16:58:51
リンク先の方を見ると何故か色々欠けているみたいなのでこっちに張り直します。
#include <stdio.h>
int main (void)
{
float rxh[8]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
int x[8]={1,2,3,4,5,6,7,8},
h[8]={8,7,6,5,4,3,2,1};
int sum1=0,sum2=0,n=8,k,y,z;
printf("x[8]=[1,2,3,4,5,6,7,8]\n");
printf("h[8]=[8,7,6,5,4,3,2,1]\n");
y=n-1;
z=n-k;
for(k=0;k<y;k++,z--){
for(n=0;n<z;n++){
sum1 = x[n] * h[n+k];
sum2 += sum1;
printf("%d---%d\n",sum1,sum2);
}
rxh[k] = (float)sum2/8;
printf("Rxh[%d]=%2.3f \n",k+1,rxh[k]);
sum2=0;
}
return(0);
}
260:デフォルトの名無しさん
08/11/05 17:16:18
>>258
気づきませんでした。ありがとうございます。
修正して下さった点は
k=0;の初期化とrxh[k] = (float)sum2/8.0;の8だった部分を8.0にで合っていますか?
261:213
08/11/05 17:53:35
>>214
返すのが遅れてすいません。どうもありがとうございます。
一晩考えたのですが…
#include <stdio.h>
int main()
{
int a[3][3];
int b[3][3];
int c[3][3];
int i, j, k;
scanf_s("%d %d %d %d %d %d %d %d %d", &a[0][0],&a[0][1],&a[0][2],&a[1][0],&a[1][1],&a[1][2],&a[2][0],&a[2][1],&a[2][2]);
scanf_s("%d %d %d %d %d %d %d %d %d", &b[0][0],&b[0][1],&b[0][2],&b[1][0],&b[1][1],&b[1][2],&b[2][0],&b[2][1],&b[2][2]);
for(i=0; i<3; i++) {
for(j=0; j<3; j++) {
for(k=0; k<3; k++) {
c[i][j] += a[i][k] * b[k][j];
}
printf("%d, " ,c[i][j]);
}
printf("\n");
}
}
とするととんでもない数字が表示されます。
262:デフォルトの名無しさん
08/11/05 18:03:04
int c[3][3] = {0};
263:デフォルトの名無しさん
08/11/05 18:26:59
cを全部0で初期化しないとね。
264:デフォルトの名無しさん
08/11/05 18:44:48
[1] 授業単元:プログラミング演習
[2]
@12個のデータを入力できる1次元配列(int型)を準備し、
キーボードから各自 適当な数字(int型の範囲)を12個入力する.
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.
A12個のデータを入力できる2次元配列(int型 3行4列)を準備し,
キーボードから各自 適当な数字(int型の範囲)を12個入力する
入力したデータは,準備した配列に格納される.
12個のデータの最大値と最小値を表示するプログラムを作成しなさい.
[3] 環境
[3.1] OS windows Vista
[3.2] コンパイラ名:gcc
[3.3] 言語: C
[4]11月12日 13:00まで
[5]その他制限:if文、for文、配列などは習いましたが、それ以上はまだ習っていません。よろしくお願いします。
265:デフォルトの名無しさん
08/11/05 19:36:54
>>262,263
できました。どうもありがとうございます。
266:デフォルトの名無しさん
08/11/05 19:49:16
239をどなたかお願いします。
267:デフォルトの名無しさん
08/11/05 20:00:44
>>239 の言ってる意味が分からないんだけど。
argc, argv をどうしたいの?
何の下位バイトを出力するの?
268:デフォルトの名無しさん
08/11/05 20:12:49
[1] 授業単元: C言語入門 文字処理の簡単な演習課題
[2] 問題文(含コード&リンク):
適当な1文字を入力し、それが元が何であったかが分からないように何文字かずらして暗号化し、また元に戻すようなプログラムを作りなさい。文字としては英字小文字のみと仮定します。
例を以下に示します。作成するプログラムも同じような出力形式にしてください。
[ 例 ]
入力文字 = x
暗号化された文字 = b
復号化された文字 = x
何文字ずらすか?については、各自で適当に設定して構いません。
ただし、暗号化された文字も、英字小文字でなければなりません。例えば、zに2を足すと、そのままでは英字でない記号になってしまいますが、これを z+1 -> a, z+2 -> b, z+3 -> c, … のようにアルファベットの先頭に戻してやる処理が必要です。
この点を工夫して下さい。
[3] 環境
[3.1] OS:Windows XP
[3.2] Visual C++ 2005
[3.3] C++
[4] 期限:11月6日23時まで
[5] その他の制限: Char型変数を使うのはわかるのですがそれからがよくわからなくて・・・。
初歩的なことですみませんが、よろしくお願いします。
269:デフォルトの名無しさん
08/11/05 20:15:06
>>239
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
union UNION {
int i;
unsigned char ch[8];
};
void f(unsigned char c)
{
unsigned char i;
for (i = (1 << (CHAR_BIT - 1)); i != 0; i >>= 1) {
if ((c & i) != 0) putchar('1');
else putchar('0');
}
}
int main(int argc, char *argv[])
{
union UNION obj;
obj.i = 0;
if (argc > 1) obj.i = atoi(argv[1]);
printf("%d\n", obj.i);
f(obj.ch[1]);
putchar(' ');
f(obj.ch[0]);
return 0;
}
よくわからないとこは適当に判断させてもらった
270:デフォルトの名無しさん
08/11/05 21:00:23
[1] 授業単元: C言語応用
[2] 問題文(含コード&リンク):
テキストファイル
CD_DATA|45
DVD_DATA|601
MD_DATA|24
メイン関数と読み込み関数で、テキストファイルの'|'より後ろを構造体に書き込み
エラー処理でテキストファイルに'|'が無い時エラーメッセージをだす。
テキストファイルの中の行数が違った時エラーメッセージをだす。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月6日15時まで
271:デフォルトの名無しさん
08/11/05 21:00:39
>>269さん
どうもありがとうございます。
272:デフォルトの名無しさん
08/11/05 21:44:12
>>268
offsset は -26 〜 26、入力文字 in の範囲チェックはどっかでやっておく
int offset = 3;
char in, en, de;
in = getchar();
/* 暗号化 */
en = (in - 'a' + offset + 26) % 26 + 'a';
/* 復号 */
de = (en - 'a' - offset + 26) % 26 + 'a';
printf("入力文字 = %c\n暗号化された文字 = %c\n復号された文字 = %c\n", in, en, de);
273:デフォルトの名無しさん
08/11/05 22:14:22
宿題への助言をお願いします。
内容は、入力された整数列を文字型配列で読み込み、その整数を以下のような変換規則に従い出力するというものです。
0→D、1→f、2→k、3→E、4→y、5→Q、6→R、7→e、8→B、9→t
以下は作ってみたものとなります。出力結果が文字化けしてしまいます…
#include<stdio.h>
#include<string.h>
#define N 50
int main(){
int i, j;
char num[N], txt[N];
printf("%d個までの整数列を入力して下さい : ", N);
scanf("%s", &num);
for(i = 0; i < strlen(num); i++){
for(j = 0; j < 10; j++){
if(num[i] == 'j') txt[i] = "DfkEyQReBt"[j];
}
}
printf("\n整数列を変換した文字列は「");
for(i = 0; i < strlen(num); i++){
putchar(txt[i]);
}
printf("」です。\n");
return 0;
}
274:デフォルトの名無しさん
08/11/05 22:24:23
>>273
scanf("%s", &num); --> scanf("%s", num); & をトル
if(num[i] == 'j') --> if(num[i] = j + '0') 'j' という文字と比べてどうすんの
以上。
275:デフォルトの名無しさん
08/11/05 22:30:26
>>274
どうもです。コンパイル通りました(^^
とっても初心者なので、「j + '0'」とするのがどうも理解しにくいところですが…(^^;
あと、sage忘れスマソ
276:14
08/11/05 22:34:32
>>16
ありがとうございます。先頭のセルの削除と解放ができました。
すべてのセルを削除すると同時に連結リストの先頭と2つ目に追加したセルの領域を解放する関数って
どう書けばいいんですか?
void *delete_all(struct cell *head)
{
struct cell * next;
if(head == NULL){
return NULL;
}
while(next !=NULL){
next = head->next;
}
free(head);
}
whileでnextをセルの終わりまで飛ばして、削除しようと考えたのですが領域の解放の部分が分かりません。
277:デフォルトの名無しさん
08/11/05 22:51:42
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月8日
よろしくおねがいします。
278:デフォルトの名無しさん
08/11/05 22:52:31
>>275
'0' は ASCII コードで 48 という整数値に対応する。
'1' は ASCII コードで 49 だから '0' + 1 と表せる。
同様に、'2', '3', ..., '9' は '0' + 2. '0' + 3, ... , '0' + 9 となる。
279:デフォルトの名無しさん
08/11/05 23:04:20
>>272
できました。
本当に助かります。ありがとうございました
280:デフォルトの名無しさん
08/11/05 23:12:41
『2つの文字列をポインタ変数pxとpyを使って入力し、
pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、
その結果を出力するプログラム』
を作れという課題なのですが、うまく動作してくれません。
誤ってる部分等、目につきましたら助言お願いします。
#include<stdio.h>
#define N 10
int main(){
char *px,*py,*pz,x[N+1],y[N+1],z[N+(N+1)]; /*最大N文字まで入力可としたいので、N+1個分の配列を用意*/
px=x;
py=y;
pz=z;
printf("2つの文字列を入力してください。(ただし、各々最大%d文字まで)\n",N);
printf("1つ目の文字列 >");
scanf("%s",px);
printf("2つ目の文字列 >");
scanf("%s",py);
/* pxとpyの文字列をpzに記憶させる部分 */
while(*pz++ = *px++) ;
pz--;
while(*pz++ = *py++) ;
printf("%s\n",pz);
return(0);
}
/*以下、出力結果
2つの文字列を入力してください。(ただし、各々最大10文字まで)
1つ目の文字列 >yamada
2つ目の文字列 >tarou
フフフフフフフフフフフフフフフフフフフフtarou
*/
281:デフォルトの名無しさん
08/11/05 23:15:38
>>280
printf("%s\n",pz);
↓
printf("%s\n",z);
282:デフォルトの名無しさん
08/11/05 23:18:01
printf()の時点でpzがどこを指してるか考えてみよう
283:280
08/11/05 23:18:50
>>281
出来ました。ありがとうございます。こんなにあっさり・・・。
すみません、どうして、pzではまずいんでしょうか?
284:281
08/11/05 23:20:21
>>283
>>282の通りだけど、
pz--;
これをできているんだからもう少し考えればいけるさ。
285:デフォルトの名無しさん
08/11/05 23:21:53
文字列操作関数使えば瞬殺だったりして
286:280
08/11/05 23:30:55
>>283>>284
解決しました。ありがとうございました。
287:デフォルトの名無しさん
08/11/05 23:35:15
>>264
1問目あがり。
全角スペースは適当に置き換えてちょ。
#include<stdio.h>
#define N 12
int main()
{
int i, array[N];
int max, min;
for( i = 0; i < N; i++ )
scanf( "%d", &array[i]);
/* とりあえず0番目の要素を最大値,最小値として設定し, それ以降の要素と比べる */
max = min = array[0];
for( i = 1; i < N; i++ ) {
if(max < array[i])
max = array[i];
if(min > array[i])
min = array[i];
}
printf( "Max: %d\nMin: %d\n", max, min);
return 0;
}
288:デフォルトの名無しさん
08/11/05 23:45:19
exeファイルの中身、C++でプログラミングした文章は、
exeファイルから知ることはできないのでしょうか?
289:デフォルトの名無しさん
08/11/05 23:55:03
>>288
なんとなくはできるよ
逆アセンブルすりゃいいじゃん
したらばニモニックが登場して
そこからアセンブリを割り出せばいい
さらにそのあと好きな高級言語に翻訳
290:デフォルトの名無しさん
08/11/05 23:58:49
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] C
[4] 期限:11月6日 朝7時
[5] その他の制限:出来るだけ簡単に!
よろしくおねがいします!!!
291:デフォルトの名無しさん
08/11/06 00:17:02
>>278
ありがとうございます、すっきりしました(^^
292:デフォルトの名無しさん
08/11/06 00:24:37
245をお願いします
293:デフォルトの名無しさん
08/11/06 00:27:32
>>288
ソースコードを知るのか、例えばアドベンチャーゲームのような、実行ファイルに含まれる
文章を知るのかによってかわるかな。
294:デフォルトの名無しさん
08/11/06 01:08:14
[1] 授業単元: ループと条件分岐
[2] 問題文(含コード&リンク): y=cos(x)の座標を*でプロットするプログラムを作ります。xの範囲は[0, 4π]です。
縦をy軸と見立てます。使うのは条件分岐のif、ループ、putcharです。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 夜が明けるまで
[5] その他の制限: 今はループと条件分岐のifまで習っています。使うのは条件分岐とループ、putcharです。
初めて書き込みします。特に難しいことは必要としないとは言っていましたが、自分には難しすぎます。
どうかよろしくお願いします。
295:デフォルトの名無しさん
08/11/06 01:14:05
>>276, >>14
URLリンク(kansai2channeler.hp.infoseek.co.jp)
296:デフォルトの名無しさん
08/11/06 01:28:06
>>294
横80文字縦20行としてとりあえず。上下非対称だがその辺は丸め誤差のせいにして。
#define WIDTH 80
#define HEIGHT 20
#define PI 3.14159265358979
int x, y;
int c[WIDTH];
for(x = 0; x < WIDTH; x++) c[x] = (cos(4 * PI / WIDTH * x) + 1)* HEIGHT/2;
for(y = 0; y <= HEIGHT; y++){
for(x = 0; x < WIDTH; x++)
if(c[x] == HEIGHT - y) putchar('*');
else putchar(' ');
putchar('\n');
}
297:296
08/11/06 01:30:01
>>296
配列習ってないんだったら if(c[x] == の部分の c[x] を
cos(4*PI/WIDTH * x) + 1)*HEIGHT/2
に置き換える。すると最初の for(x = 0; は不要。
298:296
08/11/06 01:33:10
と思ったけど、暗黙のキャスト使ってるから一度 int の配列に入れておくのが吉かも。
299:デフォルトの名無しさん
08/11/06 01:38:35
>>295 全然トリッキーじゃなかった。
struct cell *next, *curr;
for (curr = head, next = NULL ; next = curr->next, curr != NULL; curr = next) {
free(curr);
}
せめてこうだったわ。半日修行してくる。
300:294
08/11/06 01:48:40
>>296
配列習ってないので、c[x]を置き換えてやってみたんですけど、何かうまくいきませんでした。
どうすればよいでしょうか。
あと「横80文字縦20行とする」ってどういうことですか。
301:デフォルトの名無しさん
08/11/06 01:49:08
>>290
URLリンク(kansai2channeler.hp.infoseek.co.jp)
302:デフォルトの名無しさん
08/11/06 01:49:11
>>264
2問目あがり。全角スペースは適当に置き換えてちょ。簡単に、簡潔にかいたつもり。
#include <stdio.h>
#define X 4 /* X,Yの値を交換しても動くから好きにしてちょ */
#define Y 3
int main(void)
{
int i, j, max, min, array[X][Y];
for( i = 0; i < X; i++ )
for( j = 0; j < Y; j++ )
scanf( "%d", &array[i][j]);
max = min = array[0][0];
for( i = 0; i < X; i++ ) {
for( j = 0; j < Y; j++ ) {
if(max < array[i][j])
max = array[i][j];
if(min > array[i][j])
min = array[i][j];
}
}
printf( "Max: %d\nMin: %d\n", max, min);
return 0;
}
303:301
08/11/06 01:51:23
問2の3行目は#include <string.h>だorz
304:294
08/11/06 02:08:21
自分でもプログラムを組んでみたんですが、これから何とかなりませんか。
自分の組んだのだと、一つしか表示されません。
#include<stdio.h>
#include<math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=0; y=y-0.1){
for(x=0; x<=pai/2; x=x+0.1){
if(y==cos(x)){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
305:デフォルトの名無しさん
08/11/06 02:19:51
y==cos(x)
幅を持たせろ、なんで一致するとおもったんだ?
306:294
08/11/06 02:22:03
幅を持たせるって、どういうことですか?
307:デフォルトの名無しさん
08/11/06 02:23:47
yが0.1刻みなのにぴったり一致するわけないだろ?
308:デフォルトの名無しさん
08/11/06 02:27:23
#include <stdio.h>
#include <math.h>
int main(){
double x, y, pai=3.14;
for(y=1; y>=-1; y=y-0.1){
for(x=0; x<= 4 *pai; x=x+0.1){
if(y - 0.05 < cos(x) && cos(x) <= y + 0.05){
putchar('*');
}
else{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
答えわたしとけばいいんじゃね?
309:294
08/11/06 02:28:13
でも刻み幅を細かくしすぎたら、画面に収まりきらないと思うのですが・・・
そういう場合はどうすればよいでしょうか。
310:デフォルトの名無しさん
08/11/06 02:32:01
>>301
おお!
あざーっす!!
311:294
08/11/06 02:32:57
本当にありがとうございました。
自分の知識が足りず、申し訳ありませんでした。
312:301
08/11/06 02:39:00
>>277
#include <math.h>を足して
関数のプロトタイプ宣言して
#define next(x) (((x)+1% (Q_SIZE+1))
↓
#define next(x) ((x+1) % (Q_SIZE+1))
関数enqueue内の return 0; の前に rear = next(rear); 足して
○○○1つ目 enqueue(n) == -1
○○○2つ目 (n=dequeue()) == -1
viewqueueは printf("末尾(長さ:%d)\n", abs(front-rear));
313:デフォルトの名無しさん
08/11/06 02:39:31
名前消すの忘れた(´・ω・`)
314:デフォルトの名無しさん
08/11/06 02:54:41
Cで以下のような関数を作りたいのですが、可能でしょうか?
可能ならば、どのように実装すればよいのか教えてください。
int myrand(int Max, int N, int prob)
0からMaxまでのランダムな整数を返しますが、
probの確率でNを返してくれるような関数です。
例えば、myrand(100, 10, 50)は50%で10を返しますが、
それ以外は1〜100までランダム、という具合です。
315:デフォルトの名無しさん
08/11/06 03:03:44
>>314
それ以外は1〜100までランダム
10は含むのか?
316:デフォルトの名無しさん
08/11/06 03:12:50
if( (double)rand()/RAND_MAX < prob )
return N;
else
return (int)(rand()*(Max+1.0)/(1.0+RAND_MAX));
317:デフォルトの名無しさん
08/11/06 04:12:38
>>316
probを100で割るか左辺を100倍しないと
318:デフォルトの名無しさん
08/11/06 09:54:40
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
10進数⇔16進数の変換プログラムを作成せよ
-10進⇒16進か16進⇒10進かを最初に選択
-変数はint型で
実行例
10進⇒16進なら1,16進⇒10進なら2を入力してください: 1 ↓
10進数を入力してください: 1000 ↓
入力した数は16進数で 3e8 です.
10進⇒16進なら1, 16進⇒10進なら2を入力してください: 2 ↓
16進数を入力してください: f86a ↓
入力した数は10進数で 63594 です.
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子は習いました。
お願いします。
319:デフォルトの名無しさん
08/11/06 10:02:27
>>318
strltolは使っちゃだめな課題っぽいけどそうなんだよね?
320:デフォルトの名無しさん
08/11/06 10:21:18
>>318
そうですね。
strltolは使わないでお願いします。
321:デフォルトの名無しさん
08/11/06 10:22:38
>>319
そうですね。
strltolは使わないでお願いします。
322:デフォルトの名無しさん
08/11/06 10:46:05
>>318
#include <stdio.h>
int main(void) {
int i, n;
printf("10進⇒16進なら1, 16進⇒10進なら2を入力してください: ");
scanf("%d", &i);
switch(i) {
case 1:
printf("10進数を入力してください: ");
scanf("%d", &n);
printf("入力した数は16進数で %x です\n", n);
break;
case 2:
printf("16進数を入力してください: ");
scanf("%x", &n);
printf("入力した数は10進数で %d です\n", n);
break;
}
return 0;
}
323:デフォルトの名無しさん
08/11/06 11:47:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:c
[4] 期限:11/10
[5] その他の制限:とくになし
よろしくおねがいします
324:デフォルトの名無しさん
08/11/06 12:07:30
>>323
int kaibun(char str[]){
{
int i, n;
/* 終端文字 \0 または \n までの文字数を数える */
for(n = 0; str[n] != '\0' && str[n] != '\n'; n++);
/* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
for(i = 0; i < n; i++) if(str[i] != str[n - i - 1]) return 0;
/* 最後まで return 0 されなかったら 1 を return */
return 1;
}
325:デフォルトの名無しさん
08/11/06 12:11:06
for(i = 0; i < n; i++)
は
for(i = 0; i < n/2; i++)
で十分だったな
326:738
08/11/06 12:23:09
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク): 入力した文字の先頭と最後の文字を出力する。
”終わり”と入力すればプログラム終了。
[3]
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C言語
[4] 期限: 2008年11月8日までお願いします。
[5] その他の制限: scanfを使うのではなくgetcharを使用
327:デフォルトの名無しさん
08/11/06 13:23:19
>>326
マルチバイト文字の処理を要求しているのか
328:324
08/11/06 13:28:33
>>323
例文よく見てなかった。大文字小文字は区別しないのな
制限なしってことだから、ctype.h の tolower 使って書き換える
if(str[i] != str[n - i - 1])
↓
if(tolower(str[i]) != tolower(str[n - i - 1]))
329:デフォルトの名無しさん
08/11/06 13:33:00
>>252
ありがとうございました!
330:324
08/11/06 14:35:12
何度もすまん。空白も無視しないとダメなんだな
int kaibun(char str[])
{
int i, n;
char buf[MAX_SIZE];
/* 終端文字 \0 または \n までの文字数を数えて空白を除いて buf にコピー */
for(i = 0, n = 0; str[i] != '\0' && str[i] != '\n'; i++) if(str[i] != ' ') buf[n++] = str[i];
/* 先頭からの文字と末尾からの文字でひとたび違ったら即 0 を return */
for(i = 0; i < n; i++) if (tolower(buf[i]) != tolower(buf[n - i - 1])) return 0;
/* 最後まで return 0 されなかったら 1 を return */
return 1;
}
331:123
08/11/06 16:34:15
>>123をお願いできないでしょうか?
332:デフォルトの名無しさん
08/11/06 18:49:14
>>324
なんども申し訳ありません
ありがとうございます!
333:デフォルトの名無しさん
08/11/06 18:58:02
>>322
本当に有難う御座いました。
大変助かりました。
334:デフォルトの名無しさん
08/11/06 19:40:49
お願いします
[1] 配列
[2]
下に示す行列の積を求めて表示するプログラムを作りなさい。
int x[2][3]={{1,2,3},{4,5,6}}
int y[3][2]={{1,5},{5,3},{8,1}}
実行結果
35 14
77 41
問
[3] 環境
[3.1] XP
[3.2] VC 6.0
[3.3] 言語:C
[4] 期限:明日まで
335:デフォルトの名無しさん
08/11/06 19:59:36
>>331
#include <string>
#include <iostream>
class Fish {};
class Wakana : public Fish{
protected: std::string name;
public:
Wakana() : name("ワカナ") { };
void show() { std::cout << name << std::endl; }};
class Tsubasu : public Wakana {
protected: std::string name;
public:
Tsubasu() : name("ツバス") { }
void show() { std::cout << Wakana::name << "→" << name << std::endl; }};
class Inada : public Tsubasu {
protected: std::string name;
public:
Inada() : name("イナダ") { }
void show() { std::cout << Wakana::name << "→" << Tsubasu::name << "→" <<name << std::endl; };};
class Hamachi : public Inada {
protected: std::string name;
public:
Hamachi() : name("ハマチ") { };
void show() {
std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << name << std::endl;}};
class Buri : public Hamachi {
protected: std::string name;
public:
Buri() : name("ブリ") { };
void show() {std::cout << Wakana::name << "→" << Tsubasu::name << "→" << Inada::name << "→" << Hamachi::name << "→" << name << std::endl;}};
int main(){Buri().show(); return 0;}
336:デフォルトの名無しさん
08/11/06 20:08:41
入出力関数は?
337:デフォルトの名無しさん
08/11/06 21:02:39
題意がいまいち分からないので継承元の文字列を継ぎ足していく感じに
URLリンク(kansai2channeler.hp.infoseek.co.jp)
クラス名がinabaになっちゃった.
338:デフォルトの名無しさん
08/11/06 21:05:41
>>334
上の方に行列の課題なかったか?
int ans[2][2] = {0};
int i, j, k;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
for(k = 0; k < 3; k++)
ans[i][j] += x[i][k]*y[k][j];
for(i = 0; i < 2; i++){
for(j = 0; j < 2; j++)
printf("%d ", ans[i][j]);
printf("\n");
}
339:デフォルトの名無しさん
08/11/06 21:12:34
[1] 授業単元: 配列を用いた計算
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限:11月10日12:00まで
[5] その他の制限: 構造体を利用することになっています。
構造体のメンバーは
行のサイズ unsigned int
列のサイズ unsigned int
行列のデータへのポインタ double **
で構成するものとする。
と指定されています。
よろしくお願いします。
340:334
08/11/06 21:31:54
>>338
ありがとうございます
341:デフォルトの名無しさん
08/11/06 23:13:24
>>316, 317
ありがとうございます。
>>315
Maxはある程度大きく、それ程厳密な確率を求めているわけではないですので、
316さんの実装で十分です。
342:デフォルトの名無しさん
08/11/07 00:17:42
[1] 授業単元: ポインタ配列
[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
char ??? = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
???
};
char ???p;
p = menu;
while(*p){
printf("???\n",???);
}
上記の???の場所を適切に埋め、動作を確認する。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語: C++
[4] 期限: [2008年11月07日10:00まで]
[5] その他の制限:
よろしくお願いします。
343:デフォルトの名無しさん
08/11/07 00:34:56
#include <stdio.h>
int main(void)
{
char *menu[] = {
"1.振り込み",
"2.預け入れ",
"3.残高照会",
"4.通帳記録",
"5.終了",
NULL,
};
char **p;
p = menu;
while(*p){
printf("%s\n", *(p++));
}
return 0;
}
344:デフォルトの名無しさん
08/11/07 00:37:17
>>343
動作確認しました。
ありがとうございます!
助かりました。
345:デフォルトの名無しさん
08/11/07 01:05:48
[1] 授業単元: C
[2] 問題文:
(1)自然数nの正の約数が6個あり(1及びn自身を含めて)
それらの総数の和が532である時のnの値を求めるプログラム。
(2)
nを2桁の偶数としn^2の下2桁がnと同じ時、nの値を求めるプログラム。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: [11月7日8:00まで]
[5] その他の制限: 特になし
(2)については答えが76と分かっているのですが
(1)についてはさっぱりなんです…
346:デフォルトの名無しさん
08/11/07 01:55:20
>>345 (1)
#include<stdio.h>
int main()
{
int n, c, a, s;
for (n = 1; ; n ++)
{
c = s = 0;
for (a = 1; a <= n; a ++)
{
if (n % a == 0)
{
c ++;
s += a;
}
}
if (c == 6 && s == 532)
{
printf("%d\n", n);
break;
}
}
return 0;
}
347:デフォルトの名無しさん
08/11/07 01:55:57
>>345
すごい力まかせ、最適化の余地あり
void main(){
int count ;
int buff[6] ;
for ( int i = 1 ; i < 532 ; i++ ){
count = 0 ;
for ( int j= 1 ; j <= i ; j++ ){
if(i%j==0){
buff[count] = j ;
count++ ;
if ( count >= 6 ){
break ;
}
}
}
if ( count == 6 && buff[5]==i){
if( buff[0] + buff[1] + buff[2] + buff[3] + buff[4] + buff[5] == 532 ){
printf ( "%d\n", i ) ;
break ;
}
}
}
}
348:デフォルトの名無しさん
08/11/07 02:07:12
(2)
#include <stdio.h>
int main(void)
{
int n, tmp;
for(n=10; n<100; n+=2){
if(n == n*n%100)
break;
}
printf("%d\n", n);
return 0;
}
349:デフォルトの名無しさん
08/11/07 04:36:24
>>339
URLリンク(kansai2channeler.hp.infoseek.co.jp)
動作確認はあまりしてない。とりあえず動く程度。分割コンパイルは適当に。
350:デフォルトの名無しさん
08/11/07 04:51:50
>>339
同じ学校だね。
351:デフォルトの名無しさん
08/11/07 06:11:38
突然すみません。getsで何も入力しなかった場合に特定の処理をしたいのですが、
下のif(a==NULL)が動作しないです。どう書けばいいか教えて下さい。
int main(){
char a[256];
gets(a);
if(a==NULL){
printf("何か入力して下さい");
}
puts(a);
}
宜しくお願いします。
352:デフォルトの名無しさん
08/11/07 06:41:13
a[0]=='\0'
353:351
08/11/07 06:57:08
>>352
ありがとうございました。
354:デフォルトの名無しさん
08/11/07 07:17:14
[1] 授業単元: C++
[2] 問題文(含コード&リンク): 上下の画面外から敵を2つ出現させて、中央へ移動。左斜め上、右斜め下へそれぞれ移動し、矢印の方向へ一周回る。
一周回ったら再び、中央へ移動する。こんな感じの動きですURLリンク(www.dotup.org)
敵を表示させるところまでいったのですが、どうかお願いします。URLリンク(www.dotup.org)
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC2005又はVC2008
[3.3] 言語: C++
[4] 期限: 2008年11月8日18:00まで
[5] その他の制限: 構造体でお願いします。説明不足な点など、何かあれば言って下さい。
355:241
08/11/07 08:35:49
どなたか>>241を御願いできないでしょうか?
356:デフォルトの名無しさん
08/11/07 10:21:50
>>354
クラスは使っていいの?
357:デフォルトの名無しさん
08/11/07 10:55:20
>>356
使っても大丈夫です。
358:デフォルトの名無しさん
08/11/07 12:02:23
>>241
問題文とか一部だけ見せられてもね・・・・
359:デフォルトの名無しさん
08/11/07 12:47:47
自分の才能の無さに絶望した。
>>354
恥ずかしすぎるので実行ファイルのみ(DXライブラリ)
URLリンク(www.dotup.org)
360:デフォルトの名無しさん
08/11/07 12:59:19
[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual Studio
[3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、
361:デフォルトの名無しさん
08/11/07 14:08:15
>>349
動作確認できました。
ありがとうございます<(_ _)>
362:デフォルトの名無しさん
08/11/07 14:09:35
例えば一回出した乱数をaに入れて固定するのはどうしたらいい?
言語はc++です
363:デフォルトの名無しさん
08/11/07 14:17:19
[1] 授業単元: プログラミング
[2] 問題文
# 下記のように,二つのベクトルを生成し,それらの内積を計算するプログラムを作成しなさい.ただし,ベクトルの各成分は0〜9の整数型の乱数で,ベクトルの長さは10とする.なお,乱数の生成にはrandを用いよ.
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 1, 4, 1, 7, 4, 9, 1, 2, 0)
b = (4, 0, 5, 4, 6, 0, 8, 6, 3, 6)
The value of the inner product of the two vectors = 182
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (4, 8, 4, 6, 8, 1, 0, 3, 5, 8)
b = (8, 6, 4, 1, 6, 0, 4, 6, 1, 0)
The value of the inner product of the two vectors = 173
kawasaki@orange ~/lectures/2008/C/5$ ./a.exe
a = (8, 7, 3, 8, 8, 3, 8, 8, 3, 1)
b = (8, 9, 6, 3, 6, 3, 6, 3, 5, 8)
The value of the inner product of the two vectors = 321
kawasaki@orange ~/lectures/2008/C/5$
# 上と同じ計算をするプログラムを,乱数の生成にMersenne Twisterを用いて書け.ヒント:genrand_real2()に適切な値の整数をかけたものを整数型にキャストして,0〜9の整数乱数をつくる.
[3] 環境
[3.1] OS: linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[5]
お願いします・・・できれば1時間以内に・・・
364:デフォルトの名無しさん
08/11/07 14:24:44
>>362
変数に代入すれば?
365:デフォルトの名無しさん
08/11/07 14:30:18
>>363
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[10], b[10], i, sum = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < 10; ++i) {
a[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
b[i]= 0 + (int)(rand() * (9 - 0 + 1.0) / (1.0 + RAND_MAX));
}
printf("a = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", a[i]);
}
printf("%d)\n", a[i]);
printf("b = (");
for (i = 0; i < 9; ++i) {
printf("%d, ", b[i]);
sum += a[i] * b[i];
}
printf("%d)\n", b[i]);
sum += a[i] * b[i];
printf("The value of the inner product of the two vectors = %d", sum);
return 0;
}
366:デフォルトの名無しさん
08/11/07 14:33:59
[1] 授業単元: プログラミング
[2] 問題文 神経衰弱の作成
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual Studio
[3.3] 言語: C
[5] その他の制限:行と列を入力し表にする、
できれば夕方あたりまでにおねがいします><
367:デフォルトの名無しさん
08/11/07 14:39:12
>>365 ありがとうございます!
368:デフォルトの名無しさん
08/11/07 14:57:06
>>365のはarrayを使うとどういった形になりますか?
369:デフォルトの名無しさん
08/11/07 16:08:25
[1] 授業単元: C,C++、データ圧縮LZ78符合
[2] 問題文:以下に与えたデータ列をLZ78符合で圧縮し、画面に表示するプログラムを作成せよ。
データ列:ABCBCBCDEBCDABCD
コンソールアプリケーションで作成すること。
画面には最低限以下のものを出力すること。
【1】与えたデータ列
【2】作成した辞書の一覧
【3】符号化したデータ列
[3] 環境
[3.1] OS: WindousXP
[3.2] コンパイラ名とバージョン: VisualStudio2005
[3.3] 言語: C,C++どちらでも可
[4] 期限:2008年11月13日まで
[5] その他の制限: 標準ライブラリ可
370:デフォルトの名無しさん
08/11/07 16:56:14
>>354
struct 座標 {
int x, y;
};
struct 移動 {
座標 end; // 移動先。この座標まで移動したら、次の方向(next)へ向かって移動する
移動 *next; // 次の移動先へのポインタ
};
こんな感じで、画面中央と画面の端の点を結んで、ループごとにちょっとずつ点に移動するのはダメ?
見当違いな事言っていたらごめんね。
371:241
08/11/07 17:47:36
>>358
すいません、241の問題が課題3でして、この前の課題1,2とそれの解答を下に。
課題1
URLリンク(kansai2channeler.hp.infoseek.co.jp)
課題2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
課題1が1/2の確立で+-1となる記憶パターンを生成するプログラムで、
課題2がシナプスの結合の重みを決定するものです。
説明と資料の不足どうもすみませんでした…。
他にも情報、説明が足りない所があればお伝え下さい。
あと追記ですが、提出期限が11月9日→11月10日に変更になりました。
372:デフォルトの名無しさん
08/11/07 18:04:34
>>371
これって正解?それとも自力で解いたやつ?
>weight[j][i]=pattern1[i]*pattern1[j];/* 結合の重みの計算*/
>weight[j][i]=weight[i][j];
課題2回答.txtのこの部分、おかしい気がするんだけど。
373:デフォルトの名無しさん
08/11/07 18:18:00
>>371
課題2からしてコンパイルどころかインデントのチェックすら通らんな
例題も、定義によれば重みの対角成分は必ず+1じゃないとおかしいのに、
全部白(-1)になってる。問題に関する資料は全部晒したほうが良いと思われ
374:デフォルトの名無しさん
08/11/07 18:37:50
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑のカレンダープログラム(西暦と月を入力するとその月のカレンダーが表示されるもの)を
次のように改造せよ。
・月のカレンダーではなく一年分のカレンダーを表示させる。
・daysinyear()とdaysinmonth()でif文ではなくswitch文を使う。
というのと、
フィボナッチ数列を、指定された個数まで求めて表示するプログラムを書け。
ループにfor文を使ったもの、whileを使ったもの、doを使ったものをそれぞれ作ることで
プログラムを三つ書く。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名: gcc
[3.3] 言語: C
[4] 期限: 2008年11月10日まで
[5] その他:上にあるカレンダープログラムは講師が生徒のレベルに合わせて
作成したものです。
2つになってしまいましたがどうかよろしくお願いします。
375:デフォルトの名無しさん
08/11/07 18:48:53
>>366
一応クリアはできた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
376:241
08/11/07 18:51:32
>>372
>>373
もうほんと色々すいません…。講義で使うPDFが重くてラウンジにupできなかったんですが、
違う所にここまでの講義内容のpdf全部上げときます。(第2回〜第5回迄)
URLリンク(www1.axfc.net)
DLパスは「123」です。馬鹿学校ですいません…。
377:デフォルトの名無しさん
08/11/07 18:57:20
>>376
上げてもらった資料まだ目を通してないけど
とりあえず対角成分だけ別に設定できるようにしてやってみた
例題と同じ値を入れてみても経過が一致しないww
URLリンク(kansai2channeler.hp.infoseek.co.jp)
378:377
08/11/07 18:58:37
例題と同じ値で試してみたい場合は最初のforループ(乱数でpattern生成するところ)を
ざっくりコメントアウトすればいい
379:デフォルトの名無しさん
08/11/07 19:11:46
[1] 授業単元:数値計算
[2] 問題文(含コード&リンク):
data[n][n]に格納された、n次正方行列の逆行列を求めるプログラムを作成せよ。
対角要素に0に近い要素があっても、正しく求められるように工夫せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限: なし
お願いします!
380:372
08/11/07 20:23:47
>>377
俺はお手上げだ。
それ、初期化忘れと、対角成分ってところに代入するのは0じゃね?
ってことでこれ。変更箇所に目印を付けてみた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
381:デフォルトの名無しさん
08/11/07 20:37:04
>>380
対角成分はテキスト読んだかぎり+1にならない理由が見当たらないが、例題では0を入れているな。
weight は全要素に値が入るんだから初期化不要では?
あと、pattern2 の初期値だが、ランダムに「反転する」ならば
if(randv > 0.75)
pattern2[i] = -pattern1[i];
else
pattern2[i] = pattern1[i]
みたいな感じにすれば、この場合 25% の確率で反転する。
382:デフォルトの名無しさん
08/11/07 22:24:20
[1] 授業単元: プログラミング実習2
[2] 問題文(含コード&リンク):
円柱の半径と高さを実数で入力し,その体積を求めるプログラムを作りなさい
-変数はすべてdouble型を用いること
-円周率p=3.14159265358979として計算
[3] 環境 Visual C++
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: C++コンパイラ,リンカ
[3.3] 言語: C言語
[4] 期限: 2008年11月10日(月)までお願いします。
[5] その他の制限: main関数,文末記号,エスケープシーケンス,printf関数
逐次処理(順次処理)、条件分岐(選択処理)if,if-else,switch、
繰り返し(反復処理)while,do-while,for、演算子の複合演算子(+=,-=,*=,/=,%=)
インクリメント(++)デクリメント(--)、scanf関数、アドレス演算子(&)は習いました。
お願いします。
383:デフォルトの名無しさん
08/11/07 22:38:25
>>382 ほんとに問題それであってる?
#include <stdio.h>
main()
{
double p = 3.14159265358979, r, h;
printf("半径: ");
scanf("%lf", &r);
printf("高さ: ");
scanf("%lf", &h);
printf("体積: %f\n", p*r*r*h);
}
384:デフォルトの名無しさん
08/11/07 22:46:30
>>383
問題文はこれだけなので合っているのですが、どうかされましたか?
385:デフォルトの名無しさん
08/11/07 22:49:00
公式と最低限の入出力関数さえ知ってれば何の苦労もなさそうだから
宿題とする価値がないというか何と言うか…
386:デフォルトの名無しさん
08/11/07 22:54:53
>>385
そうなんですか。
一応、この問題はC言語のテキストの発展問題なんですがそんなに簡単だったんですね。
そんな問題が解らないって本当に自分やばいですね。
何はともあれ、宿題をやって下さって有難う御座いました。
本当に助かりました。
387:デフォルトの名無しさん
08/11/07 23:06:11
[1] 授業単元:Linuxプログラミング
[2] 問題文(含コード&リンク):
途中までつくって、コンパイルも出来るようになったのですが、動作が中途半端です。fork(), execvp, waitあたりが理解出来ていないからどこか
がおかしいと思うのですが、見て下さい。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 4.1.2
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
やろうとしていること:
実行すると、testプロンプトが表示されるので、好きなコマンドを実行すると、結果を表示する。->例えば、test> ls -l -a /tmp/temp.txt
exitを入力するまで繰り返し何度でもコマンドを実行出来る。
質問(1)なぜか最初の一回目はexecvpによるコマンド実行結果が表示されません。二回目からは正常に動作するのですが。。
質問(2)exitを入力するまでループにしているのですが、一回入力させれば終了したいのに、複数回コマンドを実行した場合は、exitも複数回入力しなければ
抜けられなくなってしまいました。
質問(3)二回目のコマンド実行時、一回目よりも短いオプションで実行するとなぜか「ls: p/temp.txt: ファイルかディレクトリが見つかりません」とエラーになります。
argv[i]に格納した文字列が途中で切れてしまっているように思われます。
質問(4)存在しないコマンドを入力するとエラーメッセージを出したいのですが、どうすればよいでしょうか。
質問(5)ソース中にシグナルキャッチャーの箇所がありますが、どのように使えばいいのかわかりません。不明確な質問ですが、この文脈で使い方がわかる
場合は教えて下さい。以上、長くなりましたが宜しくお願いします。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4991日前に更新/337 KB
担当:undef