Problém s programom – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s programom – C / C++ – Fórum – Programujte.comProblém s programom – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Kent0
Stálý člen
5. 12. 2012   #1
-
0
-

Dobrý deň:)

mám jeden problém s programom

Úloha znie nejako takto:
Vytvorte textový súbor, v ktorom budú mená a  5 známok (napr. Janko 11245). Vytvorte program, ktorý načíta z daného textového súboru meno a známky a vypíše na obrazovku meno a priemer známok. Priemer známok vypočítajte cez pole, t.j. každú známku zapíšte do poľa a potom vypočítajte priemer.

A v čom je problém?
Viem prečítať meno aj známku:
 

FILE *fr;
  char meno[10],* znamky[10];
 
  
  fr=fopen("text.TXT","r");
  
  while(feof(fr)==0)                           
  {                                            
            fscanf(fr,"%s %s",meno,znamky);         // nacita meno a znamky
            printf("%s %s",meno,znamky);             // vypise meno a znamky 
            printf("\n");          
  }
  
                  
  fclose(fr);

viem aj cez pole vypočítať priemer(len cvičný program):
 

  int i,n,A[10];
  float priemer,sucet=0;
  
  printf("Zadaj pocet znamok, od 1 do 10: ");           
  scanf("%d",&n);
  
  for(i=1;i<=n;i++)                                         
  {
                   printf("Zadaj znamku: ");
                   scanf("%d",&A[i]);                          //znamka zapisana v poli
  }
  


  for(i=1;i<=n;i++)
  {                
       sucet=sucet+A[i];                                       //vypocet suctu znamok
       
  }
  
  priemer=sucet/n;                                             //vypocet priemeru
  printf("Priemer cisiel je: %.2f",priemer);         

Ale neviem ako to mám spojiť. Ako mám tie známky zapísať do poľa. Viem, že tam treba tie známky z char previesť do int ale neviem ako. A ani čo ďalej.

Tak by som poprosil nejakú pomoc :) Ďakujem

Nahlásit jako SPAM
IP: 77.234.226.–
Martin Kozibrátka
~ Anonymní uživatel
138 příspěvků
5. 12. 2012   #2
-
0
-

Pokud nastuduješ stringstream, jistě ho znovu v budoucnu použiješ. 

#include <sstream>

main()
{
char znakmy_char[10];
int znamky_int[10]
for(i=1;i<=10;i++)                                         
  {
	stringstream (znakmy_char[i])>>znamky_int[i]; 
	
  }


}
Nahlásit jako SPAM
IP: 188.120.221.–
Kent0
Stálý člen
5. 12. 2012   #3
-
0
-

   

#include <stdio.h>
#include <stdlib.h>
#include <sstream>

int main(int argc, char *argv[])
{
  FILE *fr;
  char meno[10],* znamky_char[10];
  int znamky_int[10],i;
 
  
  fr=fopen("text.TXT","r");
  
  while(feof(fr)==0)                           
  {                                            
            fscanf(fr,"%s %s",meno,znamky_char);         // nacita meno a znamky
            printf("%s %s",meno,znamky_char);             // vypise meno a znamky na obrazovku
            printf("\n");          
  }
  
  for(i=1;i<=10;i++)
  {
                   stringstream(znamky_char[i]>>znamky_int[i];
  }
                  
  fclose(fr);
  
  system("PAUSE");	
  return 0;
}

takto som to spravil ak som dobre pochopil. Ale nechce mi to ísť. Keď som na nete hľadal ten stringstream tak mi to našlo len pre C++ a ja toto robím v C. Môže to byť aj tým? 

Nahlásit jako SPAM
IP: 77.234.226.–
Kent0
Stálý člen
5. 12. 2012   #4
-
0
-

ešte mi tam chýba zátvorka :)

  stringstream(znamky_char[i]>>znamky_int[i]);
Nahlásit jako SPAM
IP: 77.234.226.–
Martin
~ Anonymní uživatel
1602 příspěvků
5. 12. 2012   #5
-
0
-
Nahlásit jako SPAM
IP: 88.83.169.–
Kent0
Stálý člen
5. 12. 2012   #6
-
0
-

Použil som tú funkciu.. 

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
  FILE *fr;
  char meno[10],* znamky_char[10];
  int znamky_int[10],i,a;

 
  fr=fopen("text.TXT","r");
 
  while(feof(fr)==0)                          
  {                                           
            fscanf(fr,"%s %s",meno,znamky_char);         // nacita meno a znamky
            printf("%s %s",meno,znamky_char);            // vypise meno a znamky na obrazovku
            printf("\n");         
  }
 
a=atoi(znamky_char);

printf("%d\n",a);

                  

                
  fclose(fr);
 
  system("PAUSE");
  return 0;
}

keď si dám tie známky vypísať tak ich vypíše takto:


a ja by som ich ešte potreboval nejako vložiť každé zvlášť do poľa a spočítať..teda spočítať už nebude problém..ale dať ich do poľa to už áno(teda pre mňa) :)

Nahlásit jako SPAM
IP: 77.234.226.–
zlz
~ Anonymní uživatel
634 příspěvků
5. 12. 2012   #7
-
0
-

To pole znaků, do kterého jsi ty známky načetl, ti nestačí ?  

Nahlásit jako SPAM
IP: 78.156.159.–
zlz
~ Anonymní uživatel
634 příspěvků
5. 12. 2012   #8
-
0
-

Jo, pozor, ono to není pole znaků. Máš to nějaké divoké.

Nahlásit jako SPAM
IP: 78.156.159.–
zlz
~ Anonymní uživatel
634 příspěvků
5. 12. 2012   #9
-
0
-

   

char meno[11], znamky_char[6];
int znamky_int[5];

while (!feof(fr))
{
	if (fscanf(fr, "%10s %5s", meno, znamky_char) != 2)
	{
		fprintf(stderr, "chyba pri cteni\n");
		exit(EXIT_FAILURE);
	}
	for (int i = 0; i < 5; i++)
	{
		if (znamky_char[i] < '0' || znamky_char[i] > '9')
		{
			fprintf(stderr, "nesmyslna znamka\n");
			exit(EXIT_FAILURE);
		}
		znamky_int[i] = znamky_char[i] - '0';
	}
}
Nahlásit jako SPAM
IP: 78.156.159.–
Kent0
Stálý člen
6. 12. 2012   #10
-
0
-

už som to spravil..:)
a celkom jednoducho

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ 
  FILE *fr;
  char a[15],b[15],c[15];
  int j,n,i;
  float priemer,sucet;
  fr=fopen("text.txt","r");    //otvorenie priecinka
  printf("TENTO PROGRAM VYRATA PRIEMER ZNAMOK\n\n");
  while(feof(fr) == 0){  //cyklus pre cely program
  fscanf(fr,"%s",a);   //nacitanie meno
  printf("meno ziaka: %s\n",a);
  fscanf(fr,"%s",b);     //nacita znamky
  n=strlen(b);            //dlzka retazca
  sucet=0;                    
  for (i=1;i<=n;i++)       //cyklus pre vypisanie a konverziu znakov
  {
  strncpy(c,b+(i-1),1);    //kopirovanie prave jedneho znaku do c z b
  j=atoi (c);             //konverzia string do int
  printf("%d ",j);          //vypisanie cisla
  sucet=sucet+j;                //sucet pre priemer
  }
  
  priemer=sucet/n;                 //priemer
  printf("\n %s ma priemer: %.3f\n\n",a,priemer);  //vypise priemer a konkretne meno ziaka
}
  system("PAUSE");	
  return 0;
}
Nahlásit jako SPAM
IP: 77.234.226.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 38 hostů

Podobná vlákna

Problém s programom — založil Kent

Problem s programom (C) — založil Cary

Problém s programom — založil Kent

Problém z programom — založil Tobinnek

Problém s programom — založil letsthrowq

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý