C/C++の宿題を片付け ..
88:デフォルトの名無しさん
08/01/15 23:37:31
>>40
これ表示するオブジェクトとかどうすんの?
球体に世界地図のテクスチャでも貼って、地球儀作って表示させんのかな
そんならカメラより地球儀動かした方が簡単な気がするけど
89:デフォルトの名無しさん
08/01/15 23:52:48
>>46
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
int main(int argc, char *argv[])
{
regex_t pat;
int i, err;
char buf[1024];
if(argc < 3)
return fprintf(stderr, "usage : %s pattern filename\n", argv[0]), 1;
if((err = regcomp(&pat, argv[1], REG_EXTENDED | REG_NOSUB | REG_NEWLINE)) != 0){
regerror(err, &pat, buf, sizeof(buf));
return fputs(buf, stderr), 1;
}
for(i = 2; i < argc; i++){
FILE *fp;
if((fp = fopen(argv[i], "r")) == NULL)
return perror(argv[i]), 1;
while(fgets(buf, sizeof(buf), fp))
if(!regexec(&pat, buf, 0, NULL, 0))
fputs(buf, stderr);
fclose(fp);
}
regfree(&pat);
return 0;
}
90: ◆5MBke502AE
08/01/15 23:54:54
>>88
オブジェクトは,建造物を3Dに起こしたもので,
x-z平面を地面としてy軸方向に高さを伸ばしたような物体を想定しています!
GPSから得られた位置をもとに, その建物オブジェクトを眺めた画像を保存し,
更に, GPS位置からある直線上(撮影方向に対する法線)にカメラ視点をズラして,
再び, オブジェクトを眺めた画像を得て…と繰り返して,
複数の画像を得ることが目的です!
言葉足らずですみません!
91:デフォルトの名無しさん
08/01/15 23:59:17
【時間切れ】 (1/15)
[前スレ] >934 >514 >881 >957 >952
【未解決問題】
スレリンク(tech板:986番) 期限切れだが早めに (pass:c)
>>40 1/16 12:00
>>77 1/16 12:00
>>86 1/22
スレリンク(tech板:824番) 1/18
スレリンク(tech板:229番) 1/31
>>79 無期限
92:デフォルトの名無しさん
08/01/16 00:21:54
>>45
>>47
お二方とも、本当にありがとうございます
いつかは自分も宿題を手伝う側になりたいと思いつつ、精進して参ります
93:デフォルトの名無しさん
08/01/16 00:26:37
>>77
> ・2つの入力年月日を実行時にキーボードから入力させるか
もう実装されてね?
94:デフォルトの名無しさん
08/01/16 00:32:39
>>48
#include <stdio.h>
int kensaku(char *data , char target)
{
int count;
for(count=0;*data!='\0';*data++){ *data==target ? count++:1; }
return count;
}
int main(void)
{
int i;
char input[100];
char target[100];
printf("キーから文字を数文字入力してください="); scanf("%s",input);
printf("調べる文字を入力してください="); scanf("%s",target);
for(i=0;target[i]!='\0';i++){
printf("入力された文字列の中に %c は、%d 個ありました。\n",target[i],kensaku(input,target[i]));
}
printf("\n何か入力をしてください\n"); scanf("%s",input);
return 0;
}
95:77
08/01/16 00:35:24
>>93さん
すいませんそうですね!誤りです。
残りの条件の方でできればお願いいたします。
96:デフォルトの名無しさん
08/01/16 01:02:47
>>77
int m22 = 1, d22 = 1;の下からy_count = year_prev(&y1, &y2);上までを以下に書き換えでいかがでしょう
char buf[100];
FILE *fp;
if (argc == 7) {
/* 引数の時
./hoge.exe y1 m1 d1 y2 m2 d2 */
y1 = atoi(argv[1]);
m1 = atoi(argv[2]);
d1 = atoi(argv[3]);
y2 = atoi(argv[4]);
m2 = atoi(argv[5]);
d2 = atoi(argv[6]);
show_date(y1, m1, d1);
show_date(y2, m2, d2);
} else if (argc == 2) {
/* ファイルのとき
ファイルの中身はテキストでy1 m1 d1 y2 m2 d2 */
fp = fopen(argv[1], "r");
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d %d %d %d %d %d", &y1, &m1, &d1, &y2, &m2, &d2);
show_date(y1, m1, d1);
show_date(y2, m2, d2);
fclose(fp);
}else {
input_date(&y1, &m1, &d1);
show_date(y1, m1, d1);
input_date(&y2, &m2, &d2);
show_date(y2, m2, d2);
}
97: ◆gDKJL3vNys
08/01/16 01:14:56
スレリンク(tech板:988番)
前スレ988です
>>75
遅くなりすみませんレスありがとうございます
情報の後だしかつ、わざわざ作っていただき申し訳ないのですが
学習範囲外技術を含んだ非常に高度なプログラムなのでバレてしまうかもしれません
またルネサスのヘッドファイルだと問題あるのかどうかもよく分かりません
クロックも20MHzだと問題あるのでしょうか?
本日(昨日?)学校より今までに学習しそれを利用して製作した
今までのプログラムをアップしておきました
ろだ、の5781.zipです
後出しかつせかっく作っていただいたのに文句ばかりつけて
本当に申し訳ありませんがアップしたプログラムの組み合わせや応用で
何かオリジナルの課題は作成可能でしょうか?
アップしたプログラムと同じや似た内容だとはねられる可能性があるので
自分なりにも考えていますが現状ではお手上げです
時間も少なく申し訳ないですが、どうかよろしくお願いします。
98:77
08/01/16 02:11:06
>>96さん
引数でもファイルからでもプログラムの実行が行えました!
教えていただいたプログラムは他の課題でも参考に使えそうです。
本当にありがとうございました!
99:75
08/01/16 12:00:27
>>97
課題サンプル見たよ
3664.hのヘッダは多分ルネサスから持ってきたもんだと思うから大丈夫
アップしたプログラムと課題には特に差はなかったです
課題のものが作れるならアップしたものも十分作れる…はず
日中時間ないんで夜になるけど、課題に合わせて修正してみるよ
アップしたプログラムの動作はLEDが以下のように並んでるとして、
常に一つだけ点灯するもの
○○○● SW2押す→ ○○●○ SW2押す→ ○●○○ SW1押す→ ○○●○
上のようにSWが押されると点灯しているLEDをずらしていくだけ
SWは一回押されたら一つLEDをずらす、SWを一回離してもう一回押さないと
動かないようにしてます、内容的にはこんなんでいいのかな
ちなみにクロック違うとタイマのカウント速度が違ってくるので
TV.TCORA = 156 とかやってる部分をクロックに合わせて変更する必要があります
3664だと多分16MHzだと思いますが、どうなってるでしょう
100:デフォルトの名無しさん
08/01/16 12:09:17
[1] 授業単元:プログラミング言語II
[2] 問題文(含コード&リンク):
ポインタ配列を用いて月の名前を英語名で静的変数に格納しなさい。
ポインタ配列を用いて各文字列を走査し、「r」が入っている月を求めなさい。
見つかった月の名前を表示しなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008/01/16 24:00まで
[5] その他の制限: 特になし
期限が今日まで申し訳ないですが、よろしくお願いします。
101:デフォルトの名無しさん
08/01/16 12:29:39
月って英語でlunaだっけ?と思った俺は負け組 orz
102:デフォルトの名無しさん
08/01/16 12:41:14
>>99の優しさを独り占めにしたい。
>>100
#include <stdio.h>
int main(void)
{
char *month[] = {"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
int i;
char *p;
for(i = 0; i < sizeof(month)/sizeof(month[0]); i++){
for(p = month[i]; *p != '\0'; p++)
if(*p == 'r')
break;
if(*p != '\0')
puts(month[i]);
}
return 0;
}
sizeof(month)/sizeof(month[0])はたまたま動くのかな?(そんなら12にしないと駄目だけど)
103:デフォルトの名無しさん
08/01/16 12:57:36
動くのはたまたまじゃないが、要素数が分かってるからやる必要はないかもな。
104:デフォルトの名無しさん
08/01/16 13:00:24
配列の要素数を指定してないんだからsizeofの方が自然じゃね?
*month[12]とかしてるなら12でもいいけど。
105:デフォルトの名無しさん
08/01/16 13:02:44
それだと文字数が12の予感
106:デフォルトの名無しさん
08/01/16 13:03:58
一度他の変数に限界値保存して比較したほうがいいな。
forループ抜けるまで変動はしないのだから、毎回sizeof2つ使って除算までしてたら無駄過ぎる。
あとbreakする前にputsすればいいところを、わざわざif文外に持ってくる理由も分からん。
107:デフォルトの名無しさん
08/01/16 13:08:55
static忘れてね?
108:デフォルトの名無しさん
08/01/16 13:11:11
忘れてた。
109:デフォルトの名無しさん
08/01/16 13:22:35
sizeof(array) / sizeof(* array)は(コンパイル時に確定するから)定数だよ。
110:デフォルトの名無しさん
08/01/16 13:24:20
>>105
アホがいるw
111:デフォルトの名無しさん
08/01/16 13:37:35
>>110
すんませんでした。
112: ◆gDKJL3vNys
08/01/16 14:30:34
>>99
レスありがとうございます
それで全然かまわないのでよろしくお願いします
お手数おかけし申し訳ありません
113:デフォルトの名無しさん
08/01/16 17:58:06
[1] 授業単元: C言語
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:visual studio 2005
[3.3] 言語: C言語
[4] 期限: 今日中です。。。
[5] その他:よろしくお願い致します。
114:デフォルトの名無しさん
08/01/16 19:01:05
>>113
URLリンク(kansai2channeler.hp.infoseek.co.jp)
Switchを再入力させる条件が読み取れなかったので、
その辺は自身で修正して。
115:デフォルトの名無しさん
08/01/16 19:06:48
>>113
おいらもできた。マルチバイト文字セットをつかってくれ
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void) {
#define BUFSIZE 256
char buffer[BUFSIZE]; unsigned char val = 0; int bitpos, bitnum, i;
while (1) {
printf("\nBit number : 7 6 5 4 3 2 1 0\n" "Bit :");
for (i=7; i >=0 ; --i) printf( ((val >> i) & 1) ? " 1" : " 0");
while (1) {
printf("\n\ninput change bit : ");
fgets(buffer, BUFSIZE, stdin);
bitpos = atoi(buffer);
if (buffer[0] == '.') { return 0; }
else if (isdigit(buffer[0]) && (bitpos >= 0 && bitpos <= 7)) { break; }
puts("\nSorry. Input 0-7 number.\n" "(. is end)");
}
while(1) {
printf("\nSwitch on(1) or off(0) ? : ");
fgets(buffer, BUFSIZE, stdin);
bitnum = atoi(buffer);
if (isdigit(buffer[0]) && (bitnum == 0 || bitnum == 1)) {
val = (bitnum == 1) ? (val | (1 << bitpos)) : (val & ~(unsigned char)(1 << bitpos));
break;
}
puts("\nSorry. Input 0 or 1.");
} }
return 0;
}
116:114
08/01/16 19:16:28
あ、バイトじゃなくてビットだから間違ってるorz
117:デフォルトの名無しさん
08/01/16 19:21:30
>>113の人気に嫉妬しつつ書いてみた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
118: ◆gDKJL3vNys
08/01/16 19:36:27
>>99
自分なりに調べてみましたが
仰られる通り
3664ではシステムクロック信号はΦ16MHzで
周波数16MHzでは1ステートは1/16MHz=0.0625μsになるようです
遅くなり申し訳ありませんがよろしければご参考ください
119:114
08/01/16 19:37:29
>>114の修正版。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
120:デフォルトの名無しさん
08/01/16 20:00:39
>>114
>>115
>>117
本当にありがとうございます。
121:デフォルトの名無しさん
08/01/16 20:35:15
[1] 授業単元:コンパイラ
[2] 問題文:
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:どちらでも可
[4] 期限: 1月17日10:00まで
[5] その他の制限:特に無し
よろしくお願いしますm(__)m
122:デフォルトの名無しさん
08/01/16 21:33:08
#include <stdio.h>
int main(void)
{
char buf[100], delim[] = "=)(+*-/.";
char *p, *q;
printf("入力 : ");
fgets(buf, sizeof(buf), stdin);
for (p = buf; *p != '\0'; p++) {
for (q = delim; *q != *p && *q != '\0'; q++);
if (*q)
printf("\n%c\n", *p);
else
putchar(*p);
}
return 0;
}
123:デフォルトの名無しさん
08/01/16 22:38:26
>>121
URLリンク(kansai2channeler.hp.infoseek.co.jp)
124:デフォルトの名無しさん
08/01/16 22:51:02
[1] 授業単元:プログラミング
[2] 問題文:
番号(整数4桁)と氏名(文字型30バイト)から構成される構造体を定義し、データを入力してその内容を表示するプログラムを作成しなさい。
なお、プログラムの終了条件は、ゼロ以下の番号が入力された時点とする。
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:VisualStudio2005
[3.3] 言語: C
[4] 期限:1月23日
[5] その他の制限:
よろしくお願いします。
125:デフォルトの名無しさん
08/01/16 23:07:56
#include <stdio.h>
struct _data{
int number;
char name[30];
};
int main()
{
int i, j, n;
char buf[100];
struct _data data[100];
for (i = 0; i < 100; i++) {
printf("number : ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &n);
if (n < 0)
break;
data[i].number = n;
printf("name : ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%s", data[i].name);
}
for (j = 0; j < i; j++)
printf("%d %s\n", data[j].number, data[j].name);
return 0;
}
配列でよかったのだろうか?
126:デフォルトの名無しさん
08/01/16 23:08:55
>>118
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応修正版、割り込みとかなしにしました
ビットシフト "<<" とかがわからんとかの話じゃないことを祈る
127:デフォルトの名無しさん
08/01/16 23:17:40
>>118
URLリンク(kansai2channeler.hp.infoseek.co.jp)
連投すまん、ビットシフトも抜いた
128:デフォルトの名無しさん
08/01/16 23:24:37
>>102
ありがとうございます!
おかげで助かりました。
129:デフォルトの名無しさん
08/01/16 23:38:43
>>121
#include<stdio.h>
int main(void){
char buf[100+1];
for(;;){
if(fscanf(stdin, "%100[A-Za-z0-9]", buf)!=1)
if(fscanf(stdin, "%1[(+*/.),-]", buf)!=1){
if(fscanf(stdin, "%1[\n]", buf)!=1) fprintf(stderr, "\nError: unexpected character.\n");
break;
}
puts(buf);
}
return 0;
}
130:デフォルトの名無しさん
08/01/16 23:55:12
ITEM *insert(ITEM **root, char*str)
{
ITEM *pos;
ITEM *tmp;
tmp = (ITEM *) *malloc(sizeof (ITEM));//領域取得
if(tmp == NULL){//取得領域失敗
return NULL;
}
//取得した領域の初期化
memset((void *)tmp, '\0', sizeof(ITEM));
strcpy(tmp -> str , str); //入力された文字列を領域に設定
//*rootに保存
if(*root == NULL){ //リストが空か?
*root = tmp ;
}
else{//リストの末尾を探して追加
pos = *root;
while(pos -> next != NULL){ //次はあるか?
pos = pos -> next;
}
pos -> next = tmp;
}
return tmp;
}
入力された文字列をリストに格納するプログラムの一部です。
しかしこれだと最後に入力した文字列が表示されなくて困っています。
おそらくこの部分に問題があると思うのですが、おかしい部分はあるでしょうか?
131:デフォルトの名無しさん
08/01/17 00:04:49
>>130
スレ違い
宿題だというなら>>1を読んでもう一度よく考えてみよう。
132:デフォルトの名無しさん
08/01/17 01:03:39
こういうのって再帰使って処理するほうが楽だと思うんだけど。
tmp->nextがNULLじゃ無いんじゃない?
133:デフォルトの名無しさん
08/01/17 01:05:50
NULLが0な処理系ならmemsetでNULLになってね?
それより、俺は返り値の意味があるのかとかmallocの前の*は何なのかとか気になるけど。
134:デフォルトの名無しさん
08/01/17 01:11:41
>>132
指摘ありがとうございます。
tmp->nextがNULLじゃ無いんじゃない? ってのは
while(pos -> next != NULLのことでしょうか?
>>133
mallocの前の*は、単なる消し忘れでした。
135: ◆gDKJL3vNys
08/01/17 01:18:59
>>127
ありがとうございます!
これからコンパイルして動作確認してみます
色々本当にありがとうございました
136:デフォルトの名無しさん
08/01/17 01:22:32
LEDを赤く光らせたり青く光らせたりすると面白そう
137:134
08/01/17 01:41:51
すいません。
自己解決しました。
なんかホントに的外しな質問をしてしまいましたw
138:デフォルトの名無しさん
08/01/17 01:54:44
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):正数nとbを10進数としてキーボードから入力すると、
nをb進数で表示するプログラムを作成せよ。
実行例
24[enter]
8[enter]
24(10) = 30(8)
[3] 環境
[3.1] OS:window
[3.2] コンパイラ名とバージョン:BCC
[3.3] 言語:C
[4] 期限:1/17
[5] その他の制限:特にありません
139:デフォルトの名無しさん
08/01/17 01:55:52
b進数の範囲は?
140:デフォルトの名無しさん
08/01/17 01:57:06
>>139
すみません、2~36でお願いします
141:デフォルトの名無しさん
08/01/17 02:14:42
>>138
#include<stdio.h>
const char *s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void conv(int n,int b){
if(n>0){
conv(n/b,b);
putchar(*(s+n%b));
}
}
int main(void){
int n,b;
scanf("%d",&n);
scanf("%d",&b);
printf("%d(10)=",n);
conv(n,b);
printf("(%d)\n",b);
return 0;
}
てきとー。おやすみなさい。
142:デフォルトの名無しさん
08/01/17 04:45:59
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):文字列として入力した式(一行)を計算し、その値を表示するプログラム。
[3] 環境
[3.1] OS:windows XP
[3.2] コンパイラ名とバージョン:Visual Studio 8
[3.3] 言語:C
[4] 期限:1/18
[5] その他の制限:少なくとも2つの2桁の整数に対する計算(四則演算)ができること。
どうかよろしくお願いしますm( _ _ )m
143:デフォルトの名無しさん
08/01/17 08:46:29
【時間切れ】 (1/16)
>40
【未解決問題】
スレリンク(tech板:986番) 期限切れだが早めに (pass:c)
>>142 1/18
スレリンク(tech板:824番) 1/18
>>86 1/22
スレリンク(tech板:229番) 1/31
>>79 無期限
144:デフォルトの名無しさん
08/01/17 08:51:33
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):円周上の点の複数の座標から円の中心(a,b)や半径rを求める
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition
[3.3] 言語: C++
[4] 期限: 無期限
[5] その他の制限: 特になし
145:デフォルトの名無しさん
08/01/17 08:57:26
>>144
点は3つでいいのかな?
146:デフォルトの名無しさん
08/01/17 09:07:47
>>145
100個ぐらいからです・・・。
まったくわからないんです。よろしくお願いします。。。
147:デフォルトの名無しさん
08/01/17 09:17:34
円を特定するには、一直線上にない異なる3点で必要十分じゃね?
148:144
08/01/17 09:21:01
すいません。問題間違いました。
正しくは、100個の座標からそれが円であるかどうか(完璧にきれいな円でなくてもよい)を判定するプログラムの作成でした。
よろしくお願いします。。。
149:デフォルトの名無しさん
08/01/17 09:25:05
判定方法は提示してもらわんとねぇ。
150:デフォルトの名無しさん
08/01/17 09:28:13
>>149
すいません!ハフ変換を使って判定します。
色々と足りないところだらけで申し訳ありません。。。
151:デフォルトの名無しさん
08/01/17 12:52:31
[1] 授業単元: プログラミング入門
[2] 問題文
(1)走行距離10kmまでは基本料金の6000円。10kmを超えた場合は、超えた距離に対して1kmあたり50円が加算される。
(2)深夜料金10時以降5時までは最終的な料金を2割増しする20キロを超えると1割引とする。
(3)迎車を使用した場合は400円として(1)〜(3)を入力して料金を出力するプログラムを作れ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition
[3.3] 言語: C
[4] 期限: 1月17日
[5] その他の制限:関数まで(初期の簡単なプログラムです)
152:デフォルトの名無しさん
08/01/17 12:53:06
151続き
(1)までのプログラム
#include<stdio.h>
main()
{
int run,price;
printf("走行距離(km)を入力せよ:");
scanf("%d",&run);
if(run<=10)
{
printf("料金は6000円です\n");
}
else
{
price=(run-10)*50+6000;
printf("料金は%d円です\n",price);
}
}
(2)と(3)お願いします。
153:デフォルトの名無しさん
08/01/17 13:09:10
「2割増しする20キロ」とか、「(1)〜(3)を入力」とか、随分ややこしいな。
154:デフォルトの名無しさん
08/01/17 13:19:22
最初に乗ったキロと深夜かどうかなどの入力をさせてやろうとしたんですが・・・。できなくてとりあえず(1)までやってみました。ややこしくてすいません。
155:デフォルトの名無しさん
08/01/17 13:32:41
落ち着け、>153は皮肉だ。
以下、問題を列挙
・深夜料金の適用条件
例えば乗車時刻が21:59だったら? 或いは4:59だったら?
・迎車との関係
例えば呼んだのが21:59だったら? また、迎車時刻を指定されることはある?
・消費税の考慮
・タクシー料金にしては論外に高い初乗り料金
156:デフォルトの名無しさん
08/01/17 13:39:10
>155
指摘ありがとうございます。
判定条件が指定されてないので、今回は乗車時刻が22時〜5時に一秒でもかかっていたら深夜料金として計算します。
迎車は有無のみで課金します。もし迎車を使用して深夜であれば最終的な料金は乗った距離の値段×深夜割増+迎車料金で出します。
消費税は考慮しません。確かに問題文法外な値段ですね^^;教授が意地悪なので・・・。
以上の点宜しくお願いします。
157:デフォルトの名無しさん
08/01/17 15:41:20
#include <stdio.h>
#include <malloc.h>
#define buffer_size 10
int main(int argc ,char *argv[])
{
FILE *fp;
fpos_t *start_fpos,*end_fpos;
char *buffer;
int n,option;
option=getopt(argc,argv,"rw");
switch(option){
case 'w':
fp=fopen(argv[1],"w");
buffer=(char *)malloc(buffer_size);
printf("文字列を書き込んでください\n");
scanf("%s",buffer);
fprintf(fp,buffer);
free(buffer);
break;
}
fclose(fp);
return 0;
}
指定したバッファサイズが入力文字数よりも小さい場合、
セグメンテーションエラーがでます。
#defineを変えないでmallocを使い書き加えるには何の関数を使えばいいですか?
ヒントをくださいませんか?よろしくお願いします。
158:デフォルトの名無しさん
08/01/17 15:47:11
>>157
buffer=(char *)malloc(buffer_size*100);
159:デフォルトの名無しさん
08/01/17 15:57:02
[1] 授業単元: C言語入門
[2] 問題文
キーボードから入力された文字列に指定した文字が何個
含まれているか表示するプログラムを作りなさい。
動作例:
キーから文字を数文字入力してください= alpha-dog
調べる文字を入力してください= a
入力された文字列の中に a は、2 個ありました。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005 Express Edition
[3.3] 言語: C
[4] 期限: 1月17日
[5] その他の制限:
160:デフォルトの名無しさん
08/01/17 16:20:20
>>159
#include <stdio.h>
int main(void)
{
int i,num=0;
char str[100],ch;
printf("文字列を入力してください:");
gets(str);
printf("探す文字を入力してください:");
scanf("%c",&ch);
for(i = 0;str[i];i++)if(str[i]==ch)num++;
printf("%c は %d 個見つかりました",ch,num);
return 0;
}
161:157
08/01/17 16:42:11
正確な文字数でメモリ確保する方法ないですか?
ヒントください。
162:デフォルトの名無しさん
08/01/17 16:47:01
文字列が入力されるまで長さがわからないなら、事前にその文字数分確保する方法はないだろ。
多目に確保するのがどうしてもイヤならリストにでもしろよw
163:デフォルトの名無しさん
08/01/17 17:09:18
>>161
scanfを使わない
164:デフォルトの名無しさん
08/01/17 18:10:39
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):整数をm個入力してソートし、その後(2分)検索をn回行うプログラムを作りなさい(mとnは入力して決める)。ただし、できるだけポインタを利用した関数を作成して用いなさい。
[3] 環境
[3.1] OS: (Windows Vista)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C)
[4] 期限: [2008年1月18日12:00まで]
[5] その他の制限:
お願いします。
165:デフォルトの名無しさん
08/01/17 18:18:26
>>161
多めに確保して、改めてmallocで宣言するくらいだな。
166: ◆cPUZU5OGFs
08/01/17 18:56:26
前スレ986の2分木の者です。
何とか解決出来たので>>143のリストから削除お願いします。
もし取り掛かってる方いましたらありがとうございました。
167:デフォルトの名無しさん
08/01/17 19:53:12
コンパイルは通るのですが、「メモリが"written"になることはできませんでした」というエラーが出てばっかりで、やりきれない気持ちでいっぱいになりました。
forループと複雑な計算を大量にしていると起こりやすい気がするのですが、その場合に考えられる特定の原因ってありますか?
168:デフォルトの名無しさん
08/01/17 19:56:50
ポインタじゃねえの?
169:デフォルトの名無しさん
08/01/17 19:59:44
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows、Unix
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2008年1月17日21:00まで
[5] その他の制限: 図があるためリンクを押すとzipを開くようになっています。
問題と図は無題.bmpです。ウイルスではありません。
お願いします。
170:デフォルトの名無しさん
08/01/17 19:59:52
>>168
試しにforループ内のiを逐一表示してみたのですが、i++なのに何故か途中でとんでもない数字に飛んだりします。
ポインタの扱いを間違っているって事ですか?
171:デフォルトの名無しさん
08/01/17 20:00:11
>>167
文章は読めたのですが、「こいつは一体何がいいたいんだ?」という疑問が出てばっかりで、
やりきれない気持ちでいっぱいになりました。
ソースを晒せばすぐに原因が分かる気がするのですが、それをしない特定の理由ってありますか?
172:デフォルトの名無しさん
08/01/17 20:00:19
>>169
すみません、URLをまちがえました
173:デフォルトの名無しさん
08/01/17 20:01:11
URLリンク(kansai2channeler.hp.infoseek.co.jp)
174:デフォルトの名無しさん
08/01/17 20:09:58
>>142
URLリンク(kansai2channeler.hp.infoseek.co.jp)
175:デフォルトの名無しさん
08/01/17 20:17:50
>>169
#include <stdio.h>
#include <stdlib.h>
int route(int m, int n)
{
if (m == 1 || n == 1) return 1;
else return route(m - 1, n) + route(m, n - 1);
}
int main(int argc, char *argv[])
{
if (argc != 3)
return 1;
int m = atoi(argv[1]), n = atoi(argv[2]);
printf("%d", route(m, n));
return 0;
}
176:デフォルトの名無しさん
08/01/17 20:23:58
>>175
実行してみたのですがなにも起こりませんでした・・・
177:167
08/01/17 20:26:46
>>171
やりきれない気持ちにさせてしまい申し訳ありません。私が分からないだけでよくある話かと思い、気軽に質問してしまいました。反省します。
プログラムが変な挙動をして強制終了する部分は下リンク先の大きなforループ内です。iが100を超えた瞬間にpointnの数値がオーバーフローします。プログラム自体は3ファイルに分かれていて長いので、ここに原因がなければ諦めます。
[1] 授業単元: 応用プログラミング
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: windowsXP
[3.2] gcc32
[3.3] cpp
178:デフォルトの名無しさん
08/01/17 20:31:59
>>177
症状が再現する最小のソースを示すのが礼儀だぞ。
widthやheightがどんな値を取るかもわからないでどうして答えられると思う?
179:デフォルトの名無しさん
08/01/17 20:34:28
なんでiが100超えるん?
180:デフォルトの名無しさん
08/01/17 20:36:16
>>179
ばっふぁおーばーふろー があれば簡単さw
181:デフォルトの名無しさん
08/01/17 20:36:50
>>176
引数に1以上与えればなんか出るはずなんだがな
182:デフォルトの名無しさん
08/01/17 20:40:12
>>181
すみません、こちらのミスでした。
ちゃんと実行できました。
ありがとうございました
183:デフォルトの名無しさん
08/01/17 20:42:47
>>179
バッファオーバーフローのテスト
コンパイラが自動変数をどこに配置するかによっても結果が変わるので
必ずしも何かが起こるとは限らない
/* 最適化をオフにしてコンパイルしてね */
#include <stdio.h>
int main(void){
int x=123;
int y[1]={456};
int z=789;
printf("x=%d z=%d\n", x, z);
y[1]=0;
printf("x=%d z=%d\n", x, z);
return 0;
}
184:デフォルトの名無しさん
08/01/17 20:47:55
point[100]なんだからiが100になっちゃいかんだろ。
185:183
08/01/17 20:50:44
>>177
i が pointn の数値以上になるということは
//後略
の部分に問題がある可能性が高いよ
>>179
ごめん勘違いしてた
186:167
08/01/17 20:52:22
>>178
最小に纏め上げるのが困難なもので…。
>>184
それでした。直した結果完璧に動きます。恥ずかしすぎる…。
みなさんご迷惑おかけしました。すれ汚しすみません。ありがとうございました。
187:デフォルトの名無しさん
08/01/17 20:59:58
別にまとめる必要すらないだろ。
まあ大方、全体を見せたくないとか言うんだろうが
188:デフォルトの名無しさん
08/01/17 21:13:50
>>167
pointn = (int)((rand()/(double)(RAND_MAX+1.0f))*100);//コア数
これだろ、、おかしいの。
189:デフォルトの名無しさん
08/01/17 21:19:01
>>174
文字列の式は固定ではなく、手動での入力なのです・・・。
自分の説明が不足していました、すみません。
あげていただいたプログラムを参考に、自分でももう少し頑張ってみます。
190:デフォルトの名無しさん
08/01/17 21:23:10
>>188
それ自体は0-99の乱数を発生させるだけで、おかしくなくね?
キャストはなくてもいいけど、あってまずいもんでもないし。
191:デフォルトの名無しさん
08/01/17 21:33:53
>>190
ぉぉぅ、たしかに普通に見間違えた。
>>167 なんでもないから>>188は普通にスルーしてくれ。
かき乱してすまん。
192:デフォルトの名無しさん
08/01/17 21:34:26
これだから情報を小出しにする奴は嫌いだ。。
どうせ原因は他にあるのに。
193:デフォルトの名無しさん
08/01/17 21:39:10
自分でここに原因があるって思って見つけられないときは
大方別のところに原因がある。
長かろうが短かろうが、主題さえはっきりしてれば別段読み解くのは難しくない。
てことで>>167ソースplz
194:デフォルトの名無しさん
08/01/17 21:41:21
もう終わってるんだけどw
195:デフォルトの名無しさん
08/01/17 23:56:16
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:VisualStudio2005
[3.3] 言語: C
[4] 期限:1月22日
[5] その他の制限: 特にないです
196:デフォルトの名無しさん
08/01/18 00:07:14
【時間切れ】 (1/17)
>>151
【未解決問題】
>>164 1/18 12:00
>>142 1/18 >>172(手動入力)
スレリンク(tech板:824番) 1/18
>>86 1/22
>>195 1/22
スレリンク(tech板:229番) 1/31
>>79 無期限
>>144 無期限 問題文>>148
197:デフォルトの名無しさん
08/01/18 00:07:39
>インターネット上でファイルの転送に利用されるプロトコルは?(20点)
>[1] FTP, [2] POP, [3] PPP, [4] SMTP << 1
>正解です。
これってPOP&SMTPもファイル転送で使わね?添付ファイルてきな意味で。
198:デフォルトの名無しさん
08/01/18 00:13:10
>>144は最小二乗法の式作ってとくところからだな
199:デフォルトの名無しさん
08/01/18 00:24:39
>>197
200:デフォルトの名無しさん
08/01/18 07:26:58
>>スレリンク(tech板:824番)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
201:デフォルトの名無しさん
08/01/18 08:06:12
>>164
#include <stdio.h>
#include <stdlib.h>
int cmp( const void * l, const void * r ) { return *((int*)l)-*((int*)r); }
int main( int argc, char ** args ) {
int m, n, i, * data;
printf( "input m :" ); scanf( "%d", &m );
printf( "input n :" ); scanf( "%d", &n );
data = ( int * )calloc( m, sizeof( int ) );
if ( ! data ) { puts( "no memory."); exit(1) ; }
for ( i = 0; i < m; ++i ) scanf( "%d", &data[ i ] );
qsort( data, m, sizeof( int ), cmp );
for ( i = 0; i < n; ++i ) {
int * p, q;
printf( "search for >" ); scanf( "%d", &q );
p = bsearch( &q, data, m, sizeof( int ), cmp );
if ( p ) printf( "%d found at %d, %d\n", q, 1 + ( p - data ), data[ ( p - data ) ] );
else printf( "not found.\n" );
}
free( data );
return 0;
}
202:デフォルトの名無しさん
08/01/18 10:28:31
[1] 授業単元:プログラミング
[2] 問題文:問題@
商品番号・商品名・個数・単価を対象とする構造体の配列を利用し、
データを入力して、一覧表を表示するプログラムを作りなさい。ただし、
各データごとに金額を、最後に合計金額を出しなさい。
問題A
上の問題の構造体の配列を利用し、データを入力した後、商品番号を
並び替えを行い、その結果を一覧表として表示するプログラムを
作りなさい。
[3] 環境
[3.1] OS: (WindowsVISTA)
[3.2] コンパイラ名とバージョン: (borland)
[3.3] 言語: (C)
[4] 期限: ■■緊急■■本日1月18日正午まででお願いします。
[5] その他の制限: 特にありません。
203:デフォルトの名無しさん
08/01/18 12:42:14
[1] 授業単元:プログラミング
[2] 問題文:文字列を逆順にコピーする関数xcopyをポインタを用いて作り、確認のためのプログラムを作りなさい。ただし、xcopy(char*to,char*from)とします。なお、対象とするデータは通常の英数字とします。
[3] 環境
[3.1] OS: (Windows VISTA)
[3.2] コンパイラ名とバージョン: (borland)
[3.3] 言語: (C)
[4] 期限: 1月18日
[5] その他の制限:
前102代目に書き込んだんですが見れなくなってしまったのでもう一度お願いします。
204:デフォルトの名無しさん
08/01/18 12:50:39
>>203
昔のスレからの拾い物
700 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 20:47:06
[1] 授業単元:C言語
[2] 問題文
要素数がnoであるint型の配列v2の並びを逆順にしたものを配列v1に格納する関数、
void intary_rcpy(int v1[],const int v2[],int no) {/…/}
を作成せよ
[3] 環境
[3.1] OS:Windows XP
[3.2] VS2005
[3.3] 言語:C++
[4] 期限: 12月7日(金)の午前中まで
よろしくお願いします
702 名前:デフォルトの名無しさん[sage] 投稿日:2007/12/06(木) 21:00:46
>>700
#include <algorithm>
void intary_rcpy(int v1[],const int v2[],int no){std::reverse_copy(v2, v2+no, v1);}
205: ◆vLIz8KOkPM
08/01/18 12:54:05
[1] プログラミンぐ演習
[2] URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3.1] Linux
[3.2] gcc
[3.3] C言語
[4] 今日15時まで
エラーの内容がわかりません…どなたか修正してください…
206:デフォルトの名無しさん
08/01/18 12:56:36
>>203
void xcopy(char *to, char *from)
{
char *p = from;
while(*p) p++;
while(p--!=from) *to++ = *p;
*to = '\0';
}
207:デフォルトの名無しさん
08/01/18 13:54:06
>>205
とりあえず その30行目を穴が開くまで読み返せ
new[ length ] = ’\0’;
single quotationが全角だ
208:デフォルトの名無しさん
08/01/18 14:32:38
[1] 授業単元: プログラミング基礎
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: [2008年01月18日23:59まで](本日中)
[5] その他の制限:
B_1は自力でいけましたが2に手が出ません;
209:デフォルトの名無しさん
08/01/18 16:20:22
>>208 B_2
#include <stdio.h>
#define N 20
void place_queen(int *x, int n, int k)
{
int i, j;
if(k == n){
for(i = 0; i < n; i++)
printf("%d ", x[i]);
putchar('\n');
return;
}
for(i = 0; i < n; i++){
for(j = 0; j < k; j++)
if(i == x[j] || k - j == i - x[j] || k - j == x[j] - i)
break;
if(j == k){
x[k] = i;
place_queen(x, n, k + 1);
}
}
}
int main(void)
{
int n, x[N];
printf("Input n : ");
scanf("%d", &n);
place_queen(x, n, 0);
return 0;
}
210:デフォルトの名無しさん
08/01/18 16:43:55
>>208
URLリンク(kansai2channeler.hp.infoseek.co.jp)
211:デフォルトの名無しさん
08/01/18 18:13:00
>>208
URLリンク(kansai2channeler.hp.infoseek.co.jp)
212:211
08/01/18 18:20:51
>>208
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ごめん、こっちで。
213:208
08/01/18 21:00:56
みなさんありがとうございます><;
参考にさせていただきました。非常に助かります
申し訳ないのですが、
もしよろしかったらこちらの方もお願いできませんか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
214:デフォルトの名無しさん
08/01/18 22:01:12
[1] 授業単元: プログラミング中級
[2] 問題文(含コード&リンク):random1.txt、random2.txtという名前の2つのファイルを
作成し、それぞれに0〜100の範囲の乱数(整数)を20個ずつ書き込みなさい。
これら2つのファイルの内容を1行ずつ比較し、大きいほうの数をmax.txtに
書き込みなさい。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: わかりません。
[3.3] 言語: C++
[4] 期限:無期限ですが、なるべく早く知りたいです。
215:214
08/01/18 22:02:59
途中まではやってみました・・
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
FILE *fout, *fout2, *fout3, *fin, *fin2;
int buf,buf2;
char filename2[]="random1.txt";
char filename3[]="random2.txt";
char filename4[]="max.txt";
int i;
printf("ファイルrandom1.txtを作成しました。\n");
printf("ファイルrandom2.txtを作成しました。\n");
printf("ファイルmax.txtを作成しました。\n");
216:デフォルトの名無しさん
08/01/18 22:03:22
>>213
良さそうな教授だなーとちょっと羨ましく思った。そんな俺は非情報学部。
217:214
08/01/18 22:03:42
続きです
fout=fopen(filename2,"w");
srand(time(NULL));
for(i=0;i<20;i++){
buf=rand()%101;
fprintf(fout,"%d\n",buf);
}
fout2=fopen(filename3,"w");
for(i=0;i<20;i++){
buf2=rand()%101;
fprintf(fout2,"%d\n",buf2);
}
fin = fopen(filename2, "r");
if(fin == NULL){
printf("%dをオープンできません\n", filename2);
exit(1);
}
218:デフォルトの名無しさん
08/01/18 22:07:50
[1] 授業単元:CプログラミングT
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:分かりません
[3.3] 言語:C++
[4] 期限:2008年1月19日 09:00
[5] その他の制限:特にありません
よろしくお願いします!
219:214
08/01/18 22:08:01
fin2 = fopen(filename3, "r");
if(fin2 == NULL){
printf("%dをオープンできません\n", filename3);
exit(1);
}
fout3=fopen(filename4,"w");
while(1){
if (fscanf(fin,"%d",buf)==EOF) break;
if (fscanf(fin2,"%d",buf2)==EOF) break;
if(buf>buf2){
fprintf(fout3,"%d\n",buf);
}
else fprintf(fout3,"%d\n",buf2);
}
fclose(fout);
fclose(fout2);
fclose(fin);
fclose(fin2);
fclose(fout3);
return 0;
}
220:デフォルトの名無しさん
08/01/18 22:16:02
>>214 すこしせこいがこれじゃだめかね
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
FILE *fran1, *fran2, *fmax;
char filename1[] = "random1.txt";
char filename2[] = "random2.txt";
char filename3[] = "max.txt";
int i, buf1, buf2;
if ((fran1 = fopen(filename1, "w")) == NULL ||
(fran2 = fopen(filename2, "w")) == NULL ||
(fmax = fopen(filename3, "w")) ==NULL) {
printf("ファイルが作れません\n");
return -1;
}
printf("ファイルrandom1.txtを作成しました。\n");
printf("ファイルrandom2.txtを作成しました。\n");
printf("ファイルmax.txtを作成しました。\n");
srand(time(NULL));
for (i = 0; i < 20; ++i) {
buf1 = rand()%101;
buf2 = rand()%101;
fprintf(fran1, "%d\n", buf1);
fprintf(fran2, "%d\n", buf2);
fprintf(fmax, "%d\n", (buf1 >= buf2) ? buf1 : buf2);
}
fclose(fran1);
fclose(fran2);
fclose(fmax);
return 0;
}
221:デフォルトの名無しさん
08/01/18 22:30:26
れいぷれいぷ
222:デフォルトの名無しさん
08/01/18 22:35:46
長くなるんならアップロードしろ
223:デフォルトの名無しさん
08/01/18 22:36:53
すいません
丸投げじゃないんですが、
どこで聞いてもわからないのでわかるかたいたらおねがいします・・
”数値を文字列として入力して、一桁ずつを配列にいれて和・差・積を出す”
って問題で、ここでプログラム作ってもらったんですがわかんないとこがあって、、
↓これ、積の計算らしいんですけどどういう意味ですか(∵)?
int i, j, carry;
// 最大100桁になるので2N桁を0に初期化
for( i = 0 ; i < 2 * Max_Length ; i++ ) a[i] = 0;
for( i = 0 ; i < Max_Length ; i++ ) {
carry = 0;
for( j = 0 ; j < Max_Length ; j++ ) {
a[i+j] += b[i] * c[j] + carry;
carry = a[i+j] / 10;
a[i+j] -= carry * 10;
詳しく説明できるかたいたらお願いします、、
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4910日前に更新/357 KB
担当:undef